【原创】Leetcode -- Reverse Linked List II -- 代码随笔(备忘)
2015-06-05 19:26
429 查看
题目:Reverse Linked List II
题意:Reverse a linked list from position m to n. Do it in-place and in one-pass.
下面这段代码,有两个地方,一个是4、5行的dummy节点设置;另一个是11-14行,局部可视化到全局。
对于我,想记录的是第二点。
局部可视化到全局的意思是每一次局部指针调整要完成一个完整的链表转换。也就是说不应该根据全局来考虑单步情况,而是单步情况就完成一个全局的实现。
即: 1-2-3-4-5, m=2, n=4, 全局思想是 把2-4进行转换,再拼接到1-5中。局部思想是每一个单步都完成全局变化,不考虑n是多少。比如第一步在2处, 转换为1-3-2-4-5。
这里有两个好处,1:代码简洁,前中后三个指针可完成所有的交换。2:需要考虑的情况少,不用像全局思路分两步执行。3:可递归的执行。
题意:Reverse a linked list from position m to n. Do it in-place and in one-pass.
下面这段代码,有两个地方,一个是4、5行的dummy节点设置;另一个是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:可递归的执行。
相关文章推荐
- 【c++】引用计数
- 多媒体开发之rtp 打包发流--- 从h264中获取分辨率
- C++程序设计 - Week 5 继承与派生
- 【JAVA基础知识总结】JAVA数据类型基础
- Java for LeetCode 164 Maximum Gap
- c#中,比较两个时间相差多少分钟
- python 发邮件 utf-8
- Java之俄罗斯方块(屌爆了版)
- python 时间戳 datetime string 转换
- 【PHP】PHP5.4.0版本ChangeLog详解(上)
- C语言中 内存的申请与释放
- SpringMVC+MyBatis项目总结(一)
- Qt 输入提示
- github常见操作和常见错误!
- C# CLR的执行模型
- Spring事务执行流程
- 浅析一个java对象初始化顺序问题
- ubuntu 10.04下的配置tftp服务器
- OK6410之tftp下载内核,nfs挂载文件系统全过程详解
- [Exception Shoot]-NullPointerException when uploading a file(struts文件上传)