Middle-题目109:143. Reorder List

本文介绍了一种链表重排算法的实现方法,通过将链表元素存储到数组中,再按照“头尾相接”的方式进行重排。该方法使用Java实现,并分析了其效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目原文:
Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
题目大意:
给出一个链表,要求按“头尾相接”的方式重排。
题目分析:
没有按照题目要求去做,先用一个数组保存下所有节点的值,再依次填上。
源码:(language:java)

public class Solution {
    public void reorderList(ListNode head) {
        List<Integer> list = new ArrayList<Integer>();
        for(ListNode node = head;node!=null;node=node.next) 
            list.add(node.val);
        int i = 0,j = list.size()-1;
        ListNode node = head;
        boolean addi = true;
        while (i <= j) {
            node.val = addi?list.get(i++):list.get(j--);
            addi=!addi;
            node=node.next;
        }
    }
}

成绩:
8ms,beats 3.74%,众数3ms,51.93%
cmershen的碎碎念:
如果此题改用LinkedList,会超时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值