您的位置:首页 > 其它

LintCode_096_链表划分

2017-12-06 21:08 417 查看

问题描述

给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。

你应该保留两部分内链表节点原有的相对顺序。

样例

给定链表 1->4->3->2->5->2->null,并且 x=3

返回 1->2->2->4->3->5->null

求解

搞两个指针,smaller记录小于x的结点, larger记录不小于x的结点,

最后将拆分出来的两个链表拼接,注意larger的next应当赋值nullptr

class Solution {
public:
ListNode *partition(ListNode *head, int x) {
ListNode dummySmaller(0);
ListNode dummyLarger(0);
auto smaller = &dummySmaller;
auto larger = &dummyLarger;

while (head) {
if (head->val < x) {
smaller->next = head;
smaller = smaller->next;
} else {
larger->next = head;
larger = larger->next;
}
head = head->next;
}
smaller->next = dummyLarger.next;
larger->next = nullptr;

return dummySmaller.next;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表 指针