问题描述:
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。
样例
给定链表 1->4->3->2->5->2->null,并且 x=3
返回 1->2->2->4->3->5->null
解题思路:可以新建两个链表,一个链表存放比给定值小的元素,另一存放比给定值大的元素。最后将存放比给定值的链表接在比给定值小的链表后面合成一个链表即可
实现代码:class Solution {
public:
ListNode *leftDummy= new ListNode(0);
ListNode *rightDummy= new ListNode(0);
ListNode *left=leftDummy;
ListNode *right=rightDummy;
if(head==NULL) {return NULL;}
while(head!=NULL){
if(head->val<x){
left->next=head;
left=head;
}
else {
right->next=head;
right=head;
}
head=head->next;
}
right->next=NULL;
left->next=rightDummy->next;
return leftDummy->next;
}
};
感悟:划分链表问题,将一个链表先拆分成两个再合成一个链表,不容易想,技巧很高。