题目

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

For example:
Given 1->2->3->4->5->NULLm = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given mn satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

代码

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
// virtual begin ListNode
ListNode dummy(-);
dummy.next = head;
// move to the m-1 ListNode
ListNode *p = &dummy;
for (int i = ; i < m-; ++i) p = p->next;
ListNode *prev = p;
ListNode *curr = p->next;
for (int i = ; i < n-m; ++i){
ListNode *tmp = curr->next;
curr->next = tmp->next;
ListNode *tmp2 = prev->next;
prev->next = tmp;
tmp->next = tmp2;
}
return dummy.next;
}
};

Tips:

这道题的思路沿用我的这一篇日志:http://www.cnblogs.com/xbf9xbf/p/4212159.html

需要考虑几种case:

m=1的情况

n=end的情况

再submit两次,就OK了。

==================================================

第二次过这道题,大体思路一下子没有完全想起来。想了一下之后,回忆起来了翻转列表类似抽书本的例子。就顺着思路把代码写出来了,一次AC。

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
ListNode* dummpy = new ListNode();
dummpy->next = head;
// find start position
ListNode* start = dummpy;
for ( int i=; i<m-; i++ ) start = start->next;
// reverse list between start and end
ListNode* curr = start->next;
for ( int i=; i<(n-m); ++i )
{
ListNode* tmp = curr->next;
curr->next = tmp->next;
tmp->next = start->next;
start->next = tmp;
}
return dummpy->next;
}
};

最新文章

  1. 白话讲MyIsam和InnoDB的区别
  2. 《kali linux 渗透测试初级教程》免费下载
  3. 跟我一起云计算(3)——hbase
  4. ecstore小记
  5. Thread类详解
  6. Eclipse常用的插件安装
  7. A. Fox and Box Accumulation
  8. 微信ios版6.2更新 聊天记录迁移更快捷朋友圈可翻译
  9. Java模拟登陆新浪微博抓取数据【转载】
  10. Selenium2Library系列 keywords 之 _SelectElementKeywords 之 get_list_items(self, locator)
  11. ps 命令使用总结
  12. win8.1(64位) apache2.4.3+php5.6.3+mysql5.6安装
  13. android 栈方式退出
  14. POJ 1013 小水题 暴力模拟
  15. Linux下的/etc/hosts文件
  16. SSM-SpringMVC-20:SpringMVC中处理器方法之返回值void篇
  17. 2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 20165326
  18. window.requestAnimationFrame与Tween.js配合使用实现动画缓动效果
  19. 30 个java编程技巧
  20. git命令操作的时候,出现中文名显示问题

热门文章

  1. git版本分支和分支、分支和主分支切换
  2. EF ObjectQuery查询及方法
  3. 解决“SQL Server 阻止了对组件 &#39;Ad Hoc Distributed Queries&#39; 的 STATEMENT &#39;OpenRowset/OpenDatasource&#39; 的访问……”【转】
  4. cms系统-帖子页面
  5. Weka 二次开发使用心得
  6. TFS看板的迭代规划
  7. IOS Prefix.pch程序常见文件 的作用
  8. World Wind Java开发之二 使用Winbuilders设计图形用户界面(转)
  9. 2018.2.6 JS-判断用户浏览器
  10. 表格和网页ico图标