文章目录
反转链表II
网址 反转链表II
题目介绍
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
题目讲解
对于这个题,利用哨兵节点会更好理解一些
让哨兵节点去当头结点的前一个节点
然后再定义两个节点pre、cur
反转最后应该是这样
因为题目说left是节点反转开始的位置
我们需要找到节点开始反转开始的前一个节点 来进行反转
所以要循环left-1次
那为什么要找到反转节点的前一个节点呢?
以1,2,3,4,5 left=2,right=4为例
反转2-4 反转成功后,1后面是4,而5前面是2,所以需要1的辅助来进行反转,以确保反转的成功性
反转过程与整个反转类似 详细请看
力扣 反转链表I
下面就是代码展示:
java
/**
* Definition for singly-linked list.
* public 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 {
public ListNode reverseBetween(ListNode head, int left, int right) {
ListNode dummy = new ListNode(0,head);//定义一个哨兵节点
ListNode p0 = dummy;
for(int i =0;i<left-1;i++){
p0 = p0.next;//
}
ListNode pre = null;
ListNode cur = p0.next;
for(int i =0;i<right-left+1;i++){
ListNode nxt = cur.next;
cur.next = pre;
pre = cur;
cur = nxt;
}
p0.next.next = cur;
p0.next = pre;
return dummy.next;
}
}