美文网首页
python实现leetcode之143. 重排链表

python实现leetcode之143. 重排链表

作者: 深圳都这么冷 | 来源:发表于2021-10-15 01:07 被阅读0次

解题思路

三步走:
第一步,找到中点,使用快慢指针
第二步,后半部分逆序
第三步,合并前后两个半部分,直到到达中间位置

143. 重排链表

代码

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reorderList(self, head: ListNode) -> None:
        if not head: return head
        slow = fast = head
        while fast and fast.next:
            slow = slow.next
            fast = fast.next.next
        bp = slow  # break point跳出的点
        # 后半部分逆序
        p = slow.next
        slow.next = None
        while p:
            tmp = p.next
            p.next = slow
            slow = p
            p = tmp
        # 然后合并
        merge(head, slow, bp)



def merge(x, y, gap):
    if x == gap:
        x.next = None
        return
    if not y: return
    xn = x.next
    yn = y.next
    x.next = y
    y.next = xn
    merge(xn, yn, gap)
效果图

相关文章

  • python实现leetcode之143. 重排链表

    解题思路 三步走:第一步,找到中点,使用快慢指针第二步,后半部分逆序第三步,合并前后两个半部分,直到到达中间位置 ...

  • 143. 重排链表

    143. 重排链表

  • LeetCode 143. 重排链表

    143. 重排链表 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→...

  • leetcode 143. 重排链表

    题目描述 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→...

  • LeetCode 143. 重排链表

    题目 给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln - 1 → ...

  • 68. LeetCode 143. 重排链表

    标签: 链表 双指针 难度: 中等 题目描述 我的解法 【step1】先用快慢指针(p1, p2)确定中间节点...

  • 143. 重排链表

    给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln...

  • 143. 重排链表

    题目地址 1.想法 1.从题目的题意可知,我们需要三步, step 1:将现有的链表分成两个部分1.L0→L中 2...

  • 143. 重排链表

    143. 重排链表 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→...

  • leetcode链表之重排链表

    143、重排链表[https://leetcode-cn.com/problems/reorder-list/] ...

网友评论

      本文标题:python实现leetcode之143. 重排链表

      本文链接:https://www.haomeiwen.com/subject/aspuoltx.html