zoukankan      html  css  js  c++  java
  • LeetCode 92. 反转链表 II

    92. 反转链表 II

    Difficulty: 中等

    反转从位置 mn 的链表。请使用一趟扫描完成反转。

    说明:
    1 ≤ m ≤ n ≤ 链表长度。

    示例:

    输入: 1->2->3->4->5->NULL, m = 2, n = 4
    输出: 1->4->3->2->5->NULL
    

    Solution

    这个题目是反转链表的变种,只不过本题的要求是对链表中间的一部分反转,其余的部分保持原样不变,对链表做原地(in-place)操作比较复杂,我们可以对中间那部分需要反转的链表单独拿出来,然后再接到原来的链表上,这样理解比较简单。

    # 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:
            if not head: return None
            res = ListNode(-1)
            pre = res
            mid, i, j = None, 0, 0
            
            while head and j < n:
                cur = head.val
                curNode = ListNode(cur)
                if i < m - 1:
                    pre.next = head
                    pre = pre.next
                    i += 1
                else:
                    curNode.next = mid
                    mid = curNode
                head = head.next
                j += 1
            while mid:
                pre.next = mid
                mid = mid.next
                pre = pre.next
            pre.next = head
            return res.next
    

    解法二:此解法可以在LeetCode 143. 重排链表 - swordspoet - 博客园一题中得到应用。

    class Solution:
        def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode:
            if not head or m == n: return head
            res = pre = ListNode(-1)
            res.next = head
            for _ in range(m-1):
                pre = pre.next
            
            rest = pre.next
            for _ in range(n-m):
                cur = rest.next
                rest.next = cur.next
                cur.next = pre.next
                pre.next = cur
            return res.next
    
  • 相关阅读:
    帮助智力障碍的可怜儿童
    PE556
    ZJOIDay2T1 BB题解
    CTSC2016游记
    再次被老爸钦点退役
    欧拉筛
    考据
    51nod 1020 逆序排列(动态规划)
    51nod 1186 质数检测(Miller-Rabin算法)
    大整数类模板
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14162994.html
Copyright © 2011-2022 走看看