[LeetCode] 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.
» Solve this problem

[解题思路]
从左往右扫描,找到第一个大于X的指针,然后再该指针左边,不断插入小于X的元素。这里为了避免处理head是否为空的检测,在头指针位置先插入一个干扰元素,以保证head永不为空,然后在最后返回的时候删除掉。


[Code]
1:    ListNode *partition(ListNode *head, int x) {  
2: // Start typing your C/C++ solution below
3: // DO NOT write int main() function
4: ListNode* p = new ListNode(x-1);
5: p->next = head;
6: head = p;
7: ListNode* pre;
8: while(p!=NULL && p->val < x)
9: {
10: pre = p;
11: p = p->next;
12: }
13: if(p!=NULL)
14: {
15: ListNode* cur = pre;
16: while(p!=NULL)
17: {
18: if(p->val <x)
19: {
20: ListNode* temp = cur->next;
21: pre->next = p->next;
22: cur->next = p;
23: cur = p;
24: p->next = temp;
25: p = pre;
26: }
27: pre=p;
28: p= p->next;
29: }
30: }
31: ListNode* temp = head;
32: head = head->next;
33: delete temp;
34: return head;
35: }


[Note]
1. Line 15
cur为插入位置的指针,在双指针遍历过程中是不变的。


转载于:https://www.cnblogs.com/codingtmd/archive/2012/12/29/5078981.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值