LeetCode 92. 反转链表 II-java图详解
原题链接
中等
作者:
OneDay1
,
2021-03-19 20:11:50
,
所有人可见
,
阅读 288
class Solution {
public ListNode reverseBetween(ListNode head, int left, int right) {
//声明一个虚拟节点
ListNode dumy = new ListNode(0);
//让虚拟节点联结到链表的头节点上
dumy.next = head;
//声明一个节点指向虚拟节点,之后的操作是声明的节点
ListNode a = dumy;
//找到left的前一个节点位置,即虚拟节点到前一个节点的步长
for(int i = 0; i < left-1;i++){
a = a.next;
}
//声明两个节点保存图中的节点位置
ListNode b = a.next;
ListNode c = b.next;
//反转的步长是right-left
for(int i = 0; i< right-left; i++){
//声明一个节点 保存c的后继节点位置
ListNode d = c.next;
//将c的节点位置执行b节点
c.next = b;
b = c;
c = d;
}
//区间中的链表反转完成后,
//将a的下一节点(left)的next指向c
a.next.next = c;
//将a的指向b 实现反转
a.next = b;
//最后返回真正的头节点
return dumy.next;
}
}