Partition List
时间:2014-03-18 06:30:28
收藏:0
阅读:462
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
.
用了哨兵之后,能够回避很多问题。在此需要注意的问题是,对于链表最后一个元素,应该考虑他是否大于等于x。之前偷懒没有处理这个元素,但是题意要求保持原顺序。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 |
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class
Solution { public : ListNode *partition(ListNode *head, int
x) { ListNode *gard = new
ListNode(0); ListNode *par = new
ListNode(x); ListNode *pp = par; gard->next = head; ListNode *pre = gard; ListNode *temp = head; if (head == NULL) return
head; while (temp -> next != NULL) { if (temp -> val >=x) { pre -> next = temp ->next; temp ->next = NULL; pp->next = temp; pp = pp->next; temp =pre->next; } else { pre =pre->next; temp = temp->next; } } if (temp -> val >=x) { pp->next = temp; pre->next = NULL; temp =pre; } temp ->next = par ->next; return
gard->next; } }; |
原文:http://www.cnblogs.com/pengyu2003/p/3605039.html
评论(0)