# 反转链表 II
给你单链表的头指针 head
和两个整数 left
和 right
,其中 left <= right
。请你反转从位置 left
到位置 right
的链表节点,返回 反转后的链表 。
示例 1:
输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]
示例 2:
输入:head = [5], left = 1, right = 1
输出:[5]
提示:
n
1 <= n <= 500
-500 <= Node.val <= 500
1 <= left <= right <= n
进阶: 你可以使用一趟扫描完成反转吗?
## template ```python class ListNode(object): def __init__(self, x): self.val = x self.next = None class LinkList: def __init__(self): self.head=None def initList(self, data): self.head = ListNode(data[0]) r=self.head p = self.head for i in data[1:]: node = ListNode(i) p.next = node p = p.next return r def convert_list(self,head): ret = [] if head == None: return node = head while node != None: ret.append(node.val) node = node.next return ret class Solution(object): def reverseBetween(self, head, m, n): """ :type head: ListNode :type m: int :type n: int :rtype: ListNode """ if m == n: return head split_node, prev, curr = None, None, head count = 1 while count <= m and curr is not None: if count == m: split_node = prev prev = curr curr = curr.next count += 1 tail, next_node = prev, None while curr is not None and count <= n: next_temp = curr.next curr.next = prev prev = curr curr = next_temp count += 1 if split_node is not None: split_node.next = prev if tail is not None: tail.next = curr if m == 1: return prev return head # %% l = LinkList() list1 = [1,2,3,4,5] l1 = l.initList(list1) left = 2 right = 4 s = Solution() print(l.convert_list(s.reverseBetween(l1, left, right))) ``` ## 答案 ```python ``` ## 选项 ### A ```python ``` ### B ```python ``` ### C ```python ```