题目链接:https://leetcode-cn.com/problems/reverse-linked-list-ii/
难度:中等
描述:
给你单链表的头指针 head
和两个整数 left
和 right
,其中 left <= right
。请你反转从位置 left
到位置 right
的链表节点,返回反转后的链表 。
提示:
链表节点数目:[1, 500]
题解
思路:
维护两个指针guard
和pointer
,guard
是第left - 1
个节点(防止left = 1
我们可以创建一个哑节点),pointer
是第right - 1
个节点。将pointer
后的节点移动到guard
后,直到全部反转完毕。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseBetween(self, head: ListNode, left: int, right: int) -> ListNode:
if left == right:
return head
dummy = ListNode(next=head)
guard = dummy
pointer = dummy.next
for i in range(left-1):
guard = guard.next
pointer = pointer.next
for i in range(right-left):
temp = pointer.next
pointer.next = pointer.next.next
temp.next = guard.next
guard.next = temp
return dummy.next