美文网首页
LeetCode-143-重排链表

LeetCode-143-重排链表

作者: 阿凯被注册了 | 来源:发表于2020-11-09 21:08 被阅读0次

给定一个单链表 L:L0→L1→…→Ln-1→Ln ,
将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

image.png
解题思路:
  1. 用快慢指针将链表分为两部分;
  2. 将后半部分链表翻转;
  3. 交叉合并两个链表。

Python3代码:

# 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:
        """
        Do not return anything, modify head in-place instead.
        """
        if not head or not head.next:
            return head
        fast = head 
        slow = head
        while fast.next and fast.next.next:
            slow = slow.next
            fast = fast.next.next
        
        mid = slow
        l1 = head
        l2 = mid.next
        mid.next = None
        
        def reverseList(head: ListNode) -> ListNode:
            prev = None
            curr = head
            while curr:
                nextTemp = curr.next
                curr.next = prev
                prev = curr
                curr = nextTemp
            return prev

        l2 = reverseList(l2)
        while l1 and l2:
            l1_tmp = l1.next 
            l2_tmp = l2.next
            
            l1.next = l2
            l1 = l1_tmp
            
            l2.next = l1
            l2 = l2_tmp

相关文章

  • LeetCode-143-重排链表

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

  • LeetCode-143-重排链表

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

  • 143. 重排链表

    143. 重排链表

  • 重排链表

    形如L1->L2->...->Ln的链表,编写函数将链表重新排列成L1->Ln->L2->Ln-1->...,要求...

  • All for PAT秋考 | 1132 - 1135

    涉及知识1132 sscanf(),浮点错误1133 链表重排(cmp函数、假装重排= =)1134 图的点覆盖(...

  • Redis数据结构学习-链表(二)

    链表 链表提供了高效的节点重排能力, 及顺序性节点访问方式, Redis构建了自己的链表实现 链表和链表节点的实现...

  • leetcode链表之重排链表

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

  • LintCode 重排链表

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

  • 链表重排序

    题目要求:对于链表如L1->L2->L3->L4->L5->L6->L7重新排列为L1->L7->L2->L6->...

  • 链表-中等:重排链表 By Swift

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

网友评论

      本文标题:LeetCode-143-重排链表

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