反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseBetween(self, head: 'ListNode', m: 'int', n: 'int') -> 'ListNode':
dummy = ListNode(None)
dummy.next = head
h = dummy
for _ in range(m-1):
h = h.next
#l从第m个节点开始
l = h.next
r = l.next
#反转左右两个节点的链接,左右两个节点继续前进
for _ in range(n-m):
r.next,l,r = l,r,r.next
#处理两个边界节点
h.next.next,h.next = r,l
return dummy.next
相关题目: