题目链接:https://leetcode.cn/problems/reverse-linked-list-ii/description/?envType=study-plan-v2&envId=top-interview-150
头节点插入法,设置一个虚拟节点,不断循环到要反转的前面一个位置,哪怕是1也能包含进去。接着反转,需要记录一开始的节点,这是反转后最后的一个节点,要指向反转完后的一个节点。中间直接头插法即可。
class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {//设置头节点,连到整个链表前面,这样子可以将left=1的情况囊括进去//dummyNode不应该动ListNode dummyNode = new ListNode(0,head);ListNode pre = dummyNode;for(int i = 1;i <= left-1;i++)pre = pre.next;//目前已经到了要翻的第一个节点的前面一个节点,开始翻转//从3开始翻转,2自己会跑到最后ListNode p = pre.next.next;//记录翻转过后的最后一个节点ListNode end = pre.next;for(int i = 1;i <= right-left;i++){end.next = p.next;ListNode temp = pre.next;pre.next = p;p = p.next;pre.next.next = temp;}return dummyNode.next;}
}