博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
143. Reorder List
阅读量:5879 次
发布时间:2019-06-19

本文共 1725 字,大约阅读时间需要 5 分钟。

Given a singly linked list L: L0→L1→…→Ln-1→Ln,

reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…

You may not modify the values in the list's nodes, only nodes itself may be changed.

Example 1:Given 1->2->3->4, reorder it to 1->4->2->3.Example 2:Given 1->2->3->4->5, reorder it to 1->5->2->4->3.

难度:medium

题目:给定一单链表 L: L0→L1→…→Ln-1→Ln, 重新排序为: L0→Ln→L1→Ln-1→L2→Ln-2→…

思路:先使用快慢指针一个一次走一步,另一个一次走两步,找出中间点。再使用头插法处理后半段,最后合并两链表。

Runtime: 2 ms, faster than 99.27% of Java online submissions for Reorder List.

Memory Usage: 40.4 MB, less than 100.00% of Java online submissions for Reorder List.

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */class Solution {    public void reorderList(ListNode head) {        if (null == head) {            return;        }        ListNode oneStepPtr = head, twoStepsPtr = head, midPtr = oneStepPtr;        while (twoStepsPtr != null) {            midPtr = oneStepPtr;            oneStepPtr = oneStepPtr.next;            twoStepsPtr = (null == twoStepsPtr.next) ? null : twoStepsPtr.next.next;        }        midPtr.next = null;        ListNode dummyHead = new ListNode(0), node = null;        while (oneStepPtr != null) {            node = oneStepPtr;            oneStepPtr = oneStepPtr.next;                        node.next = dummyHead.next;            dummyHead.next = node;        }        ListNode ptr = head;        dummyHead = dummyHead.next;        while (ptr != null && dummyHead != null) {            node = ptr;            ptr = ptr.next;            ListNode qNode = dummyHead;            dummyHead = dummyHead.next;                        qNode.next = ptr;            node.next = qNode;        }    }}

转载地址:http://ddcix.baihongyu.com/

你可能感兴趣的文章
Spark:求出分组内的TopN
查看>>
Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特
查看>>
关于跨DB增量(增、改)同步两张表的数据小技巧
查看>>
学员会诊之03:你那惨不忍睹的三层架构
查看>>
vue-04-组件
查看>>
Golang协程与通道整理
查看>>
解决win7远程桌面连接时发生身份验证错误的方法
查看>>
C/C++ 多线程机制
查看>>
js - object.assign 以及浅、深拷贝
查看>>
python mysql Connect Pool mysql连接池 (201
查看>>
Boost在vs2010下的配置
查看>>
一起谈.NET技术,ASP.NET伪静态的实现及伪静态的意义
查看>>
20款绝佳的HTML5应用程序示例
查看>>
string::c_str()、string::c_data()及string与char *的正确转换
查看>>
11G数据的hive初测试
查看>>
如何使用Core Text计算一段文本绘制在屏幕上之后的高度
查看>>
==和equals区别
查看>>
2010技术应用计划
查看>>
XML 节点类型
查看>>
驯服 Tiger: 并发集合 超越 Map、Collection、List 和 Set
查看>>