题解 | #链表内指定区间反转#
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
//1.将原链表分为三部分,m之前,m到n直接,n之后,并切断其联系
//2.将m,n之间链表反转
ListNode pre = dummy;//头结点的前一个
ListNode start = head;//头结点
for(int i = 1;i<m;i++){
pre = start;
start = start.next;
}
//循环n-m次
for(int i = 0; i<n-m; i++){
ListNode temp = start.next;//中间值,头结点的下一个
// start.next 和 pre.next 互换位置
start.next = temp.next;
temp.next = pre.next;
pre.next = temp;
}
return dummy.next;
}
//2.将m,n之间链表反转
//3.将三部分重新连接
//初始化一个空节点,初始赋值为0,指针指向为list
ListNode dummy = new ListNode(0);
//head=ListNode(1)
dummy.next = head;ListNode pre = dummy;//头结点的前一个
ListNode start = head;//头结点
for(int i = 1;i<m;i++){
pre = start;
start = start.next;
}
//循环n-m次
for(int i = 0; i<n-m; i++){
ListNode temp = start.next;//中间值,头结点的下一个
// start.next 和 pre.next 互换位置
start.next = temp.next;
temp.next = pre.next;
pre.next = temp;
}
return dummy.next;
}
