您的位置:首页 > 其它

Partition List

2015-09-24 15:12 246 查看

题目: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.

Given 
1->4->3->2->5->2
 and x =
3,
return 
1->2->2->4->3->5
.

思路:从前往后。

    有一些比较好的技巧,就是新建两个头结点,作为起始端。再设立左右结尾节点。一次判断,不过别忘了,最后节点指向空,不然不能通过。

代码:

class Solution {
public:
ListNode* partition(ListNode* head, int x) {
if (head==NULL||head->next==NULL){
return head;
}

ListNode *left=new ListNode(-1),*right=new ListNode(-1);
ListNode *leftTail=left,*rightTail=right;

while (head!=NULL){
if (head->val<x){
leftTail->next=head;
head=head->next;
leftTail=leftTail->next;
leftTail->next=NULL;
}else{
rightTail->next=head;
head=head->next;
rightTail=rightTail->next;
}
}
right=right->next;
leftTail->next=right;
rightTail->next=NULL;
return left->next;
//最后没有设置链表指向空,所以出错。
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: