05
08/2015
[LeetCode] Partition List
Partition List
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of the nodes in each of the two partitions.
For example,
Given 1->4->3->2->5->2
and x = 3,
return 1->2->2->4->3->5
.
解题思路:
这道题的题意是,给定一个链表和一个值x,将链表中小于x的节点放在大于或等于x的节点之前,但要保持链表的稳定性。这道题比较简单,扫描一次链表,将小于x的组成一个链表,其余节点组成一个链表,然后两个链表连接起来即可。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* partition(ListNode* head, int x) { ListNode* myHead1 = new ListNode(0); //前半部分头部 ListNode* myHead2 = new ListNode(0); //后半部分头部 ListNode* tail1 = myHead1; ListNode* tail2 = myHead2; ListNode* p = head; while(p!=NULL){ if(p->val<x){ tail1->next = p; tail1 = tail1->next; }else{ tail2->next = p; tail2 = tail2->next; } p = p->next; } tail1->next = myHead2->next; tail2->next = NULL; p = myHead1->next; delete myHead1; delete myHead2; return p; } };
转载请注明:康瑞部落 » [LeetCode] Partition List
0 条评论