• 反转链表2


        题目:

        反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

        说明:
        1 ≤ m ≤ n ≤ 链表长度。

        示例:

        输入: 1->2->3->4->5->NULL, m = 2, n = 4
        输出: 1->4->3->2->5->NULL

        来源:力扣(LeetCode)
        链接:https://leetcode-cn.com/problems/reverse-linked-list-ii

    static ListNode reverse(ListNode head,int m,int n){
          /*反转的前一个节点*/
            ListNode h=null;
          /*反转的第一个节点*/
          ListNode h1=null;
          /*反转末尾的后一个节点*/
            ListNode t=null;
          /*反转末尾的节点*/
          ListNode t1=null;
          /*当前节点*/
            ListNode curr=head;
            /*临时节点*/
            ListNode pre=null;
            int count=1;
            while (curr!=null){
              /*记录反转的前一个节点*/
                if(count+1==m){
                  h=curr;
                  curr=curr.next;
                  count++;
                  continue;
                }
                /*小于m的不需要反转*/
                if(count<m){
                  curr=curr.next;
                  count++;
                  continue;
                }
                /*记录反转的第一个节点*/
                if(count==m){
                  h1=curr;
                }
                /*记录反转末尾的后一个节点*/
                if(count==n+1){
                  t=curr;
                }
                /*大于n的不需要反转*/
              if(count>n){
                curr=curr.next;
                count++;
                continue;
              }
              /*记录反转末尾的节点*/
                if(count==n){
                  t1=curr;
                }
              count++;
                /*记录当前节点的后一个节点*/
                ListNode temp=curr.next;
                /*赋值当前节点的下一个节点是临时节点*/
                curr.next=pre;
                /*赋值临时节点为当前节点*/
                pre=curr;
                /*当前节点赋值为下一个节点,继续遍历*/
                curr=temp;
            }
            /*反转的前一个节点的下一个节点赋值为反转末尾的节点*/
            if(h!=null){
              h.next=t1;
            }
            /*反转的第一个节点的下一个节点为反转末尾的后一个节点*/
            if(h1!=null){
              h1.next=t;
            }
            /*如果m不是第一个节点则返回入参的节点*/
            if(m>1){
              return head;
            }
            /*返回第一个节点*/
            return pre==null?head:pre;
        }
    View Code
    @Data
        public static class ListNode{
            private int value;
            private ListNode next;
    
            public ListNode(int value){
                this.value=value;
            }
        }
    View Code
  • 相关阅读:
    20181126-java-面试知识-收集
    redis学习
    ThoughtWorks.QRCode类库
    Microsoft Enterprise Library
    DocX插件
    Aspose 插件
    工厂示例
    面向对象
    WebSocket 是什么原理?为什么可以实现持久连接?
    label标签的作用
  • 原文地址:https://www.cnblogs.com/wuyouwei/p/11764633.html
Copyright © 2020-2023  润新知