zoukankan      html  css  js  c++  java
  • 【LeetCode92】Reverse Linked List II★★

    题目描述:

    解题思路:

      题目大意:给定一个链表,反转第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代码:

     

     1 //public class LeetCode92为测试
     2 public class LeetCode92 {
     3     public static void main(String[] args) {
     4         ListNode n1=new ListNode(1),n2=new ListNode(2),n3=new ListNode(3),n4=new ListNode(4),n5=new ListNode(5);
     5         n1.next=n2;
     6         n2.next=n3;
     7         n3.next=n4;
     8         n4.next=n5;
     9         System.out.println("原来链表:"+n1.val+"->"+n2.val+"->"+n3.val+"->"+n4.val+"->"+n5.val);
    10         ListNode n=new Solution().reverseBetween(n1,2,4);
    11         System.out.println("反转链表:"+n.val+"->"+n.next.val+"->"+n.next.next.val+"->"+n.next.next.next.val+"->"+n.next.next.next.next.val);
    12     }
    13 }
    14 class Solution {
    15 public ListNode reverseBetween(ListNode head, int m, int n) {
    16         ListNode dummy=new ListNode(0);
    17         dummy.next=head;
    18         ListNode pre=dummy;
    19         ListNode current=head;
    20         for(int i=1;i<=m-1;i++){
    21             pre=current;
    22             current=current.next;
    23         }
    24         ListNode then=null,then_next=null;
    25         if(current!=null)
    26             then=current.next;
    27         if(then!=null)
    28             then_next=then.next;
    29         for(int j=m;j<n;j++){
    30             then.next=current;
    31             current=then;
    32             then=then_next;
    33             if(then_next!=null)
    34                 then_next=then_next.next;
    35         }
    36         pre.next.next=then;
    37         pre.next=current;
    38         return dummy.next;
    39     }
    40 }
    41 class ListNode {
    42     int val;
    43     ListNode next;
    44     ListNode(int x) { val = x; }
    45     }

    程序结果:

  • 相关阅读:
    c# GDI+ 绘制矩形圆角
    ActivityManager
    PowerDesigner15 下载 数据库建模工具
    IaaS、PaaS和SaaS
    discuz 社区工具
    c# 字符串比较方法
    android adb 命令大全
    unity
    backtrack5 中文网
    aws
  • 原文地址:https://www.cnblogs.com/zhangboy/p/6481656.html
Copyright © 2011-2022 走看看