题目描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。
你应该保留两部分内链表节点原有的相对顺序。
样例
给定链表 1->4->3->2->5->2->null,并且 x=3
返回 1->2->2->4->3->5->null
做题思路:先找到比给定的val大和小的结点,找到之后,比给定值小的划分到leftdummy的后面,比给定值大的结点划分到rightdummy的后面,再把两个链表还有给定的结点合在一起。
关键代码:ListNode*partition(ListNode *head, int x) {
// write your code here
if(head==NULL)
return NULL;
ListNode *leftDummy=new ListNode(0);
ListNode *rightDummy=new ListNode(0);
ListNode *left=leftDummy;
ListNode *right=rightDummy;
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;
}
做题感想:这题是最刚开始做的几个题,还没有充分接触链表的题,看的时候有点难度,一直在看代码画图,看不懂就一直在看,最后弄清了思路。