92. 反转链表 II

题目

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

92. 反转链表 II

代码

package LeetCode92;

 class ListNode {
      int val;
      ListNode next;
     ListNode() {}
      ListNode(int val) { this.val = val; }
      ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  }

class Solution {
    ListNode nextnode=null;//后继结点声名
    public ListNode reverseBetween(ListNode head, int left, int right) {


//        逆转前N个结点方法
        if (left==1){
          return reverseN(head,right);
        }
        head.next=reverseBetween(head.next,left-1,right-1);//向前递归,并改变next结点

        return head;//最终输出的第一次调用的head,也就是说链表的第一个结点
    }
    ListNode reverseN(ListNode head,int n){//翻转前n个结点

        if (n==1){
             nextnode= head.next;//获取翻转部分的下一个结点
             return  head;//返回要反转的最后一个结点
        }
//  递归翻转
        ListNode last =reverseN(head.next,n-1);

//        翻转操作
        head.next.next=head;
        head.next=nextnode;
        return last;//返回翻转最后结点


    }


}

方法

  • 要旋转中间某部分的链表,那就一直访问到要调用的结点,然后翻转前N个结点
  • 需要记录反转结点后继一个结点,翻转后需要接上
  • 注意维护下一个结点
上一篇:Python爬虫编程思想(92):项目实战:抓取京东图书评价


下一篇:Spicy Restaurant