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;
}
};