码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 86 Partition List

时间:2015-04-12 10:33:09      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

关于List换位置移动,一个很好的解决途径就是 使用 vector 来储存 ListNode *, 然后可以方便的计算其长度 v.size() 并且进行移动,删改等操作。 

注意:

1. 其实vector操作和真实指针移动操作的时间差不太多。 

2. 还要记得判断head是否为NULL

3. 在使用 v->next = ....先思考一下,v到底存不存在,也就是有没有v->next 的可能性. 

4. 如果每次都要判断给head赋值时是否为空,还不如增加个新的fakenode的节点。 

5. ListNode *p; 

   delete p; 

delete 只是删除那个指针,并没有删除那个指针所指向的数值。 

思路一: 

利用分界值,和两个vector来分别存储小于 x 和大于等于x的pointer,然后在把存大值的vector 放到小的那个vector 里面,重新进行链接。 

思路二: 

新开两个list,然后操作类似于vector. 

 1 class Solution {
 2 public:
 3     ListNode *partition(ListNode *head, int x) {
 4         if(head == NULL)
 5             return head; 
 6 
 7         std::vector<ListNode*> v1,v2;
 8         int cnt,length;
 9         length = 0;
10         ListNode * p = head; 
11         while(p)
12         {
13             if(p->val < x)
14                 v1.push_back(p);
15             else
16                 v2.push_back(p);
17             p = p->next;
18             length ++; 
19         }
20         
21         for (int i=0;i<v2.size();i++)
22             v1.push_back(v2[i]);
23 
24         ListNode *newhead; 
25         newhead = p = v1[0];
26 
27         for(int i=0;i<length-1;i++)
28             v1[i]->next = v1[i+1];
29         v1[length-1]->next = NULL; 
30         return newhead; 
31     }
32 };

 思路二: 

 1 class Solution {
 2 public:
 3     ListNode *partition(ListNode *head, int x) {
 4         if(head == NULL)
 5             return head; 
 6 
 7         ListNode * p = head; 
 8         ListNode *head1, *p1, *head2, *p2; 
 9         int flag1, flag2; 
10         flag1 = flag2 = 0;
11         while(p)
12         {
13             if(p->val < x)
14             {
15                 if(flag1 == 0)
16                 {
17                     flag1 = 1;
18                     p1 = head1 = p; 
19                 }
20                 else
21                 {
22                     p1 ->next = p;
23                     p1 = p1->next; 
24                 }
25             }
26                 
27             else
28             {
29                 if(flag2 == 0)
30                 {
31                     flag2 = 1;
32                     p2 = head2 = p; 
33                 }
34                 else
35                 {
36                     p2 ->next = p;
37                     p2 = p2->next; 
38                 }
39             }
40             p = p->next;
41         }
42         if(flag1 == 0)
43         {
44             p2 -> next =NULL;
45             return head2; 
46         }
47         if (flag2 == 0)
48         {
49             p1 -> next = NULL; 
50             return head1; 
51         }
52         p1->next = head2; 
53         p2 -> next = NULL;
54         ListNode *newhead; 
55          
56         return head1; 
57     }
58 };

 

Leetcode 86 Partition List

标签:

原文地址:http://www.cnblogs.com/zhuguanyu33/p/4419035.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!