leetcode92. 反转链表 II

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_36811967/article/details/88235742

反转从位置 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:
        res = ListNode(0)
        res.next = head
        before = res  # 反转的前一个节点
        for i in range(m-1):
            before = before.next
        a = before.next
        b = a.next
        while m < n:  # 把b放到翻转的最前面
            a.next = b.next
            b.next = before.next
            before.next = b
            b = a.next
            m += 1
        return res.next

猜你喜欢

转载自blog.csdn.net/sinat_36811967/article/details/88235742