题目链接:https://leetcode-cn.com/problems/reverse-linked-list-ii/
难度:中等

描述:
给你单链表的头指针 head 和两个整数 leftright ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回反转后的链表 。

提示:
链表节点数目:[1, 500]

题解

思路:
维护两个指针guardpointerguard是第left - 1个节点(防止left = 1我们可以创建一个哑节点),pointer是第right - 1个节点。将pointer后的节点移动到guard后,直到全部反转完毕。

  1. # Definition for singly-linked list.
  2. # class ListNode:
  3. # def __init__(self, val=0, next=None):
  4. # self.val = val
  5. # self.next = next
  6. class Solution:
  7. def reverseBetween(self, head: ListNode, left: int, right: int) -> ListNode:
  8. if left == right:
  9. return head
  10. dummy = ListNode(next=head)
  11. guard = dummy
  12. pointer = dummy.next
  13. for i in range(left-1):
  14. guard = guard.next
  15. pointer = pointer.next
  16. for i in range(right-left):
  17. temp = pointer.next
  18. pointer.next = pointer.next.next
  19. temp.next = guard.next
  20. guard.next = temp
  21. return dummy.next