LeetCode(92):反转链表 II
Medium!
题目描述:
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
解题思路:
根据以往的经验一般都是要建一个dummy node,连上原链表的头结点,这样的话就算头结点变动了,我们还可以通过dummy->next来获得新链表的头结点。这道题的要求是只通过一次遍历完成,就拿题目中的例子来说,变换的是2,3,4这三个点,那么我们可以先取出2,用front指针指向2,然后当取出3的时候,我们把3加到2的前面,把front指针前移到3,依次类推,到4后停止,这样我们得到一个新链表4->3->2, front指针指向4。对于原链表连说,有两个点的位置很重要,需要用指针记录下来,分别是1和5,因为当2,3,4被取走时,原链表就变成了1->5->NULL,要把新链表插入的时候需要这两个点的位置。1的位置很好找,因为知道m的值,我们用pre指针记录1的位置,5的位置最后才能记录,当4结点被取走后,5的位置需要记下来,这样我们就可以把倒置后的那一小段链表加入到原链表中。
C++解法一:
/**
* 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 *dummy = new ListNode(-);
dummy->next = head;
ListNode *cur = dummy;
ListNode *pre, *front, *last;
for (int i = ; i <= m - ; ++i) cur = cur->next;
pre = cur;
last = cur->next;
for (int i = m; i <= n; ++i) {
cur = pre->next;
pre->next = cur->next;
cur->next = front;
front = cur;
}
cur = pre->next;
pre->next = front;
last->next = cur;
return dummy->next;
}
};
最新文章
- css的字体
- zoj3806Incircle and Circumcircle
- HDU1518 Square(DFS)
- placeholder兼容方法(兼容IE8以上浏览器)
- 【Linux】inode_针对MySQL读写操作在系统层的进一步学习【转】
- Get code int value for different encoding
- 【转】java中静态代码块的用法 static用法详解
- 第十七章、程序管理与 SELinux 初探
- 完美实现同时分享图片和文字(Intent.ACTION_SEND)
- asp.net BulletedList绑定数据及vs2013添加数据库文件
- 使用Visual Studio Code开发.NET Core看这篇就够了
- 校园生活app结对开发第一天
- Education CodeForces Round 63 Div.2
- vue中的computed(计算属性)和watch(监听属性)的特点,以及深度监听
- 标签传播算法(Label Propagation Algorithm, LPA)初探
- Guava Cache 本地缓存组件浅析
- Web应用程序的敏感信息-隐藏目录和文件
- 在views中引用UserProfile报错RuntimeError: Model class apps.users.models.UserProfile doesn&#39;t declare an explicit app_label and isn&#39;t in an application in INSTALLED_APPS.
- Jenkins使用遇到的问题总结
- javascript高级程序设计第二章知识点提炼
热门文章
- 调用kaldi的模型进行解码
- 使用X.509数字证书加密解密实务(一)-- 证书的获得和管理
- WSGI、uwsgi和uWSGI
- 20165237 2017-2018-2 《Java程序设计》第2周学习总结
- Navicat for MySQL 12中文版 破解流程
- 【转】实习小记-python 内置函数__eq__函数引发的探索
- webstorm的快捷键总结
- 题解-bzoj3569 DZY Loves Chinese II
- VIsual Studio编译OpenCV:无法打开python27_d.lib(python36_d.lib)的问题
- 第八次作业(课堂实战)- 项目UML设计(团队)