# 反转链表 II 给你单链表的头指针 head 和两个整数 leftright ,其中 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]

 

提示:

 

进阶: 你可以使用一趟扫描完成反转吗?

## 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 ```