博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode#链表#143.重排链表
阅读量:3951 次
发布时间:2019-05-24

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

给定一个单链表 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.

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/reorder-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode() {} *     ListNode(int val) { this.val = val; } *     ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */class Solution {
public void reorderList(ListNode head) {
if(head==null || head.next==null) return; ListNode mid = midNode(head); ListNode R = reverse(mid.next); mid.next = null; ListNode p = head,q = R; while(q!=null) {
ListNode first = p.next; ListNode second = q.next; p.next = q; q.next = first; p = first; q = second; } } public ListNode midNode(ListNode head) {
if(head==null || head.next==null) return head; ListNode fast = head; ListNode slow = head; while(fast!=null &&fast.next!=null) {
fast = fast.next.next; slow = slow.next; } return slow; } public ListNode reverse(ListNode head) {
ListNode temp = null,pre = null; while(head!=null) {
temp = head.next; head.next = pre; pre = head; head = temp; } return pre; } }
你可能感兴趣的文章
大数据读心术丨这15条数据统计准爆了!
查看>>
500款各领域机器学习数据集,总有一个是你要找的
查看>>
收藏 | Linux常用156个命令汇总!
查看>>
十张图看懂未来大数据世界
查看>>
“揭秘”大数据的10个神话!
查看>>
《中国区块链行业发展报告2018》全文发布!
查看>>
高盛发布区块链报告:从理论到实践(中文版)
查看>>
用Python从零开始创建区块链
查看>>
使用 Charles 抓取 app 数据包
查看>>
Linux time subsystem 详解(1) ----概述
查看>>
大牛很通俗地介绍《信号与系统》
查看>>
执行程序(例如UltraEdit)在WIN7下添加到右键菜单
查看>>
flash and root your Nexus10
查看>>
深入学习Make命令和Makefile(上)(2)
查看>>
深入学习Make命令和Makefile(下)(2)
查看>>
10大玄机为你揭开炒土豆丝爽脆的秘密——尖椒土豆丝
查看>>
grep与正则表达式
查看>>
git patch 使用
查看>>
如何进行Linux Kernel 开发
查看>>
技术人攻略访谈二十九:平行世界守护者
查看>>