您的位置:首页 > 其它

[LeetCode] Partition List 解题报告

2012-12-29 12:51 357 查看
Given a linked list and a value x[/i], partition it such that all nodes less than x[/i] come before nodes greater than or equal to x[/i].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[/i] = 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为插入位置的指针,在双指针遍历过程中是不变的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: