【Reverse Linked List II】cpp
2024-09-03 01:48:44
题目:
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->NULL
, m = 2 and n = 4,
return 1->4->3->2->5->NULL
.
Note:
Given m, n 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;
}
};
最新文章
- 白话讲MyIsam和InnoDB的区别
- 《kali linux 渗透测试初级教程》免费下载
- 跟我一起云计算(3)——hbase
- ecstore小记
- Thread类详解
- Eclipse常用的插件安装
- A. Fox and Box Accumulation
- 微信ios版6.2更新 聊天记录迁移更快捷朋友圈可翻译
- Java模拟登陆新浪微博抓取数据【转载】
- Selenium2Library系列 keywords 之 _SelectElementKeywords 之 get_list_items(self, locator)
- ps 命令使用总结
- win8.1(64位) apache2.4.3+php5.6.3+mysql5.6安装
- android 栈方式退出
- POJ 1013 小水题 暴力模拟
- Linux下的/etc/hosts文件
- SSM-SpringMVC-20:SpringMVC中处理器方法之返回值void篇
- 2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 20165326
- window.requestAnimationFrame与Tween.js配合使用实现动画缓动效果
- 30 个java编程技巧
- git命令操作的时候,出现中文名显示问题
热门文章
- git版本分支和分支、分支和主分支切换
- EF ObjectQuery查询及方法
- 解决“SQL Server 阻止了对组件 &#39;Ad Hoc Distributed Queries&#39; 的 STATEMENT &#39;OpenRowset/OpenDatasource&#39; 的访问……”【转】
- cms系统-帖子页面
- Weka 二次开发使用心得
- TFS看板的迭代规划
- IOS Prefix.pch程序常见文件 的作用
- World Wind Java开发之二 使用Winbuilders设计图形用户界面(转)
- 2018.2.6 JS-判断用户浏览器
- 表格和网页ico图标