给定一个链表和两个整数m, n, 翻转链表第m个节点到第n个节点(从1开始计数).

如, 给定链表: 1->2->3->4->5->NULL, 以及 m = 2, n = 4.

返回 1->4->3->2->5->NULL.

假定m和n满足约束条件: 1 ≤ m ≤ n ≤ 链表长度.

注意: 不能使用额外空间, 且只能遍历链表一次.

算法思路:

翻转的过程可以分解成3步:

把相邻的节点的指向关系倒置; 即 1->2<-3<-4  5->NULL

把第m-1个节点(1)指向第n个节点(4); 即 1->4->3->2  5->NULL

把第m个节点(2, 需要缓存)指向第n+1个节点(5). 即 1->4->3->2->5->NULL

/**
* 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) {
if(!head || m == n)
return head;
ListNode *p = head;
int count = ;
while(count < m-)
{
p = p->next;
count++;
}
ListNode *p1;
if(m == )
p1= p;
else
{
p1 = p->next;
count++;
}
ListNode *last = p1;
ListNode *p2 = p1->next;
ListNode *tmp = NULL;
while(p2 && count < n)
{
tmp = p2->next;
p2->next = p1;
p1 = p2;
p2 = tmp;
count++;
}
last->next = tmp;
if(m == )
head = p1;
else
p->next = p1;
return head;
}
};

最新文章

  1. php无限分类
  2. Versions 出现 SVN Working Copy xxx locked
  3. 【Regular Expression】常用的正则表达式
  4. springmvc 入门级教程
  5. linux-CentOS6.4下安装oracle11g详解
  6. &lt;Chapter 2&gt;2-2-2-1.介绍JSPs,JSTL,和EL(Introducing JSPs, JSTL, and EL)
  7. hdu 4763 Theme Section(KMP水题)
  8. 2016030206 - mysql常用命令
  9. Codeforces Round #226 (Div. 2)C. Bear and Prime Numbers
  10. [置顶] IOS7状态栏StatusBar官方标准适配方法
  11. 一名测试初学者听JAVA视频笔记(一)
  12. web前端学习(2):开始编写HTML
  13. Ubuntu安装使用latex
  14. struts2 easyui实现datagrid的crud
  15. proxy.go 源码阅读
  16. javascript 之 函数
  17. linux中centros6.7安装php5.6,httpd-2.2.19(web产品化)遇到的问题总结
  18. [转]nodeJS中redis初步使用
  19. Bootstrap 可视化HTML编辑器,summernote
  20. gentoo 建立本地软件库并安装软件 Custom repository

热门文章

  1. Mysql之explain调优
  2. 第三天 RHEL7-Unix/Linux系统 介绍
  3. 转载--httpclient原理和应用
  4. msdia80.dll文件出现在磁盘根目录下的解决方案(转)
  5. Pytorch 一些函数用法
  6. 图片服务器(FastDFS)的搭建
  7. 优先队列PriorityQueue实现 大小根堆 解决top k 问题
  8. hdu 6113 度度熊的01世界(结构体的赋值问题)
  9. HDU 3172 Virtual Friends(map+并查集)
  10. 生产者与消费者的Java实现