92.反转链表
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表
- 构建一个虚拟节点,让它指向原链表的头节点。
- 设置两个指针,pre 指针指向以虚拟头节点为链表的头部位置,cur 指针指向原链表的头部位置。
- 让着两个指针向前移动,直到 pre 指向了第一个要反转的节点的前面那个节点,而 cur 指向了第一个要反转的节点。
- 开始指向翻转操作
- 1)、设置临时变量 temp,temp 是 cur 的 next 位置,保存当前需要翻转节点的后面的节点,我们需要交换 temp 和 cur
- 2)、让 cur 的 next 位置变成 temp 的下一个节点
- 3)、让 temp 的 next 位置变成 cur
- 4)、让 pre 的 next 位置变成 temp
class Solution {
public ListNode reverseBetween(ListNode head, int left, int right) {
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode pre = dummy;
ListNode cur = head;
for (int i = 0; i < left - 1; i++) {
pre = pre.next;
cur = cur.next;
}
for (int i = 0; i < right - left; i++) {
ListNode temp = cur.next;
cur.next = cur.next.next;
temp.next = pre.next;
pre.next =temp;
}
return dummy.next;
}
}
标签:pre,ListNode,cur,temp,反转,next,链表
From: https://www.cnblogs.com/kingmc/p/16948462.html