题目链接: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 = nextclass Solution:def reverseBetween(self, head: ListNode, left: int, right: int) -> ListNode:if left == right:return headdummy = ListNode(next=head)guard = dummypointer = dummy.nextfor i in range(left-1):guard = guard.nextpointer = pointer.nextfor i in range(right-left):temp = pointer.nextpointer.next = pointer.next.nexttemp.next = guard.nextguard.next = tempreturn dummy.next
