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

Leetcode--代码随笔(备忘)

时间:2015-06-05 20:59:28      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:

题目:Reverse Linked List II

题意:Reverse a linked list from position m to n. Do it in-place and in one-pass.

下面这段代码,有两个地方,一个是dummy节点的设置,4、5行;另一个是11-14行,局部全实现。

 1  ListNode *reverseBetween(ListNode *head, int m, int n) {
 2     if(m==n)return head;
 3     n-=m;
 4     ListNode prehead(0);
 5     prehead.next=head;
 6     ListNode* pre=&prehead;
 7     while(--m)pre=pre->next;        
 8     ListNode* pstart=pre->next;
 9     while(n--)
10     {
11         ListNode *p=pstart->next;
12         pstart->next=p->next;
13         p->next=pre->next;
14         pre->next=p;
15     }
16     return prehead.next;
17 }

对于我,想记录的是第二点。

局部全实现也就是说每一次局部指针调整要完成一个完整的链表转换。也就是说不应该根据全局来考虑单步情况,而是单步情况就完成一个全局的实现。

即: 1-2-3-4-5, m=2, n=4,  全局思想是 把2-4进行转换,再拼接到1-5中。局部思想是每一个单步都完成全局变化,不考虑n是多少。比如第一步在2处, 1-3-2-4-5

这里有两个好处,1:代码简洁,前中后三个指针可完成所有的交换。2:需要考虑的情况少,不用像全局思路分两步执行。3:可递归的执行。

Leetcode--代码随笔(备忘)

标签:

原文地址:http://www.cnblogs.com/xiaoboCSer/p/4555440.html

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