题目描述:

解题思路:

  题目大意:给定一个链表,反转第m到第n个结点部分,m、n满足1 ≤ m ≤ n ≤ length of list。

  解题思路参照LeetCode206题,用迭代法,不过要注意以下几点:

  (a):为方便操作,新建一个辅助结点dummy,使其下一个结点指向头节点。

  (b):维护4个指针:pre、current、then、then_next,pre指向第m个结点的前一个结点,current指向当前操作的位于区间[m,n]的结点,then指向current的下一个结点,then_next指向then的下一个结点。

  注意:这里的current、then、then_next就相当于LeetCode206题中的pre、current、next!

  初始化状态如下:

  dummy.next=head;

  pre=dummy;

  current=null,then=null,then_next=null。

  下面以链表1->2->3->4->5,m=2,n=4举例:

  (1)初始状态:

  

  (2)遍历到m位置时:

  (3)一次迭代操作后:

  (4)迭代最终位置:

    (5)执行①pre.next.next=then;②pre.next=current; 后:

Java代码:

 

 //public class LeetCode92为测试
public class LeetCode92 {
public static void main(String[] args) {
ListNode n1=new ListNode(1),n2=new ListNode(2),n3=new ListNode(3),n4=new ListNode(4),n5=new ListNode(5);
n1.next=n2;
n2.next=n3;
n3.next=n4;
n4.next=n5;
System.out.println("原来链表:"+n1.val+"->"+n2.val+"->"+n3.val+"->"+n4.val+"->"+n5.val);
ListNode n=new Solution().reverseBetween(n1,2,4);
System.out.println("反转链表:"+n.val+"->"+n.next.val+"->"+n.next.next.val+"->"+n.next.next.next.val+"->"+n.next.next.next.next.val);
}
}
class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
ListNode dummy=new ListNode(0);
dummy.next=head;
ListNode pre=dummy;
ListNode current=head;
for(int i=1;i<=m-1;i++){
pre=current;
current=current.next;
}
ListNode then=null,then_next=null;
if(current!=null)
then=current.next;
if(then!=null)
then_next=then.next;
for(int j=m;j<n;j++){
then.next=current;
current=then;
then=then_next;
if(then_next!=null)
then_next=then_next.next;
}
pre.next.next=then;
pre.next=current;
return dummy.next;
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}

程序结果:

【LeetCode92】Reverse Linked List II★★的更多相关文章

  1. 【leetcode】Reverse Linked List II

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

  2. 【leetcode】Reverse Linked List II (middle)

    Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...

  3. 【链表】 Reverse Linked List II

    题目: Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1- ...

  4. 【LeetCode练习题】Reverse Linked List II

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

  5. 【12_206】Reverse Linked List

    本来没想出来,刚才突然想到,可以用“头插法”来反转 Reverse Linked List My Submissions Question Total Accepted: 66556 Total Su ...

  6. 【leetcode刷题笔记】Reverse Linked List II

    Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...

  7. 【leetcode】Reverse Linked List(easy)

    Reverse a singly linked list. 思路:没啥好说的.秒... ListNode* reverseList(ListNode* head) { ListNode * rList ...

  8. 【Leetcode】【Easy】Reverse Linked List

    题目: Reverse a singly linked list. 解题: 反转单链表,不再多介绍了. 如果会“先条件->定参数->确定不变式->验证后条件”的思维方法,一定会bug ...

  9. 【LeetCode206】Reverse Linked List★

    题目描述: 解题思路: 关于单链表的反转有迭代和递归两种方法,方法不在多,本文主要介绍迭代的方法. 迭代的方法,要使用三个指针,需要注意一点的是指针的初始化,对第一个指针初始化为pre=null,第二 ...

随机推荐

  1. 【代码笔记】iOS-自定义switch

    一,效果图. 二,工程图. 三,代码. ViewController.h #import <UIKit/UIKit.h> #import "CustomSwitch.h" ...

  2. jQuery中hover方法和toggle方法使用指南

    jQuery提供一些方法(如:toggle)将两种事件效果合并到一起,比如:mouseover.mouseout:keyup.keydown等 1.hover函数 hover(over,out)一个模 ...

  3. 实现卡片效果【DIV+CSS3】

    一.文字卡片效果 <html> <head> meta<charset="utf-8"> <title>文字卡片效果</tit ...

  4. css 解决图片下小空隙问题

    http://baijiahao.baidu.com/s?id=1581004863053583633&wfr=spider&for=pc 这篇讲的挺清楚,也有解决办法

  5. 安装vs2008出现MSI returned error code 1603的错误的解决

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在win7 64位旗舰版上安装vs2008 ,一直停留在下面页面: 最后错误日志是: [12/12/16,15:39: ...

  6. PostGIS安装

    PostGIS安装 1.软件下载 postgresql-9.6.1-1-windows-x64-binaries.zip https://www.postgresql.org/download/win ...

  7. 借助 Java 9 Jigsaw,如何在 60 秒内创建 JavaFX HelloWorld 程序?

    [编者按]本文作者为 Carl Dea,主要介绍利用 Jigsaw 项目在大约一分钟内编写标准化的"Hello World"消息代码.本文系国内 ITOM 管理平台 OneAPM ...

  8. Knockout学习,添加模板,事件,Mouseover,mouseout

    <div class="rtitle">我的收藏</div> <div class="list_ul" data-bind=&qu ...

  9. 使用yum下载rpm包

    查看系统有哪些可用的yum源yum repolist all yum指定本地源安装rpm包yum install <package-name> --enablerepo=<repos ...

  10. 【转】Nginx学习---深入浅出Nginx的介绍

    [原文]https://www.toutiao.com/i6595428119933354500/ Nginx是一款轻量级的Web服务器.反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在 ...