博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode 92. Reverse Linked List II
阅读量:5244 次
发布时间:2019-06-14

本文共 1712 字,大约阅读时间需要 5 分钟。

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.


解题思路:

反转整个链表的变种,指定了起点和终点。由于m=1时会变动头节点,所以加入一个dummy头节点
 
1. 找到原链表中第m-1个节点start:反转后的部分将接回改节点后。
从dummy开始移动m-1步
 
D->1->2->3->4->5->NULL
       |
      st
 
2. 将从p = start->next开始,长度为L = n-m+1的部分链表反转。
            __________
            |                  |
            |                 V
D->1->2<-3<-4    5->NULL             
       |     |           | 
      st    p          h0         
 
3. 最后接回
 
            __________
            |                  |
            |                 V
D->1   2<-3<-4    5->NULL             
       |________|                

 


Java code:
20160601
/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode reverseBetween(ListNode head, int m, int n) {        //iterative        //base case        if (head == null || head.next == null || m < 1 || m >= n) {            return head;        }        ListNode dummy = new ListNode(0);        dummy.next = head;        ListNode pre = dummy;        ListNode cur = head;        //move m-1 to the node before reverse start         int count = 1;        while (count < m) {            pre = cur;            cur = cur.next;            count++;        }        ListNode beforeReverse = pre;        ListNode startReverse = cur;                while (count <= n) {            ListNode next = cur.next;            cur.next = pre;            pre = cur;            cur = next;            count++;        }        beforeReverse.next = pre;        startReverse.next = cur;        return dummy.next;    }}

 


Reference:

1. http://bangbingsyb.blogspot.com/2014/11/leetcode-reverse-linked-list-ii.html
 

 

转载于:https://www.cnblogs.com/anne-vista/p/5551671.html

你可能感兴趣的文章
Windows下的Eclipse启动出现:a java runtime environment(JRE) or java development kit(JDK) must be.......
查看>>
PLC 通讯
查看>>
【读书笔记】C#高级编程 第三章 对象和类型
查看>>
python之decode、encode及codecs模块
查看>>
使用 Apache Pig 处理数据6
查看>>
Hadoop集群内lzo的安装与配置
查看>>
CASS 7.1 和 AutoCAD 2006的安装使用
查看>>
supervisor之启动rabbitmq报错原因
查看>>
Struts2工作原理
查看>>
二 、Quartz 2D 图形上下文栈
查看>>
[Leetcode Week8]Edit Distance
查看>>
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
ASP.NET 3.5构建Web 2.0门户站点
查看>>
PP tables for production order
查看>>
oam系统安装,windows操作系统注册列表影响系统安装
查看>>
[scrum]2011/9/25-----第五天
查看>>
《人月神话》有感,好书,推荐
查看>>
IE浏览器打开chorme浏览器,如何打开其他浏览器
查看>>
GNU 内联汇编
查看>>
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>