【LeetCode】143. 重排链表

【2019年计算机统考408真题】

一、题目描述

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

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:

给定链表 1->2->3->4, 重新排列为 1->4->2->3.

示例 2:

给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.

二、解题思路 & 代码

发现是由L摘取第一个元素,再摘取倒数第一个元素…依次合并成的。
为了方便链表后半段取元素,需要先将L后半段原地逆置,否则每取最后一个节点都需要遍历一次链表。
【408真题题目要求空间复杂度为O(1),不能借助栈】

步骤

  1. 先找处链表L的中间结点,为此设置两个指针p和q,指针p每次走一步,指针q每次走两步,当指针q到达链尾时,指针p正好在链表的中间结点;
  2. 然后将L的后半段结点原地逆置;
  3. 从单链表前后两段中 依次各取一个结点,按要求重排;

后半段逆置那里搞不懂的可以去看看力扣有一道题 反转链表

另外这个题与判断 回文链表 那一题所用的方法一样,一块整理着学习效果不错

# 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 or not head.next.next:
            return

        slow, fast = head, head.next
        while fast and fast.next:
            slow, fast = slow.next, fast.next.next
        new_head = slow.next
        slow.next = None

        new_head = self.revserve_list(new_head)

        while new_head:
            post = new_head.next
            new_head.next = head.next
            head.next = new_head
            head = new_head.next
            new_head = post

    def revserve_list(self, head):
        if not head or not head.next:
            return head

        prev = None
        while head:
            post = head.next
            head.next = prev
            prev = head
            head = post
        return prev

时间复杂度: O(n)

参考:

  1. LeetCode 题解讨论区
全部评论

相关推荐

来个大佬救一下,为上投了都是石沉大海了,没实习经历的话怕秋招直接进不了面。什么实习这么难找,基本
心态爆炸了:现在正式的岗位都少,实习基本不咋招的,除了大厂,中小企业其实没那么多岗位需求,就算是有,大多都是招一两个廉价劳动力,同时,他们也会希望你一来就能干活的,没时间培训你,就让你了解公司的项目,你了解完就可以开始干活。再者是,很多低质量的实习其实用处没有那么大的。我去年也是找实习找到破防,最后去了一家深圳的小公司实习,工作对我来说很简单,甚至不如我在学校做的项目,秋招的时候,这段实习经历也并没有帮上什么忙,投递简历,依旧非常低的回复率。低回复率是常态,尤其是找实习,找不到,那就把重心放在优化自己的简历和项目,多看八股文,锻炼自己的面试能力,多看别人的面经,自己模拟面试,等秋招的时候,只要有那么寥寥几次,好好抓住那几次机会。
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务