- 92. 反转链表 II - 力扣(LeetCode)
- 给你单链表的头指针
head
和两个整数left
和right
,其中left <= right
。请你反转从位置left
到位置right
的链表节点,返回 反转后的链表 。
- A -> B -> C
- ^ ^ ^
- pre cur nxt
-
- A <- B C
- ^ ^ ^
- pre cur nxt
-
- A <- B <- C
- ^ ^ ^
- pre cur nxt
- class Solution {
- public ListNode reverseBetween(ListNode head, int left, int right) {
- ListNode dummy = new ListNode(-1, head), p = dummy;
- for (int i = 0; i < left - 1; i++) {
- // 找到待交换结点的前一个结点
- p = p.next;
- }
-
- ListNode pre = null, cur = p.next;
- for (int i = 0; i < right - left + 1; i++) {
- ListNode nxt = cur.next;
- cur.next = pre;
- pre = cur;
- cur = nxt;
- }
-
- p.next.next = cur;
- p.next = pre;
-
- return dummy.next;
- }
- }