143. 重排链表

题目描述

给定一个单链表 LL0→L1→…→Ln-1→Ln ,
将其重新排列后变为:
L0→L
n
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.

分析

使用双向链表queue来存该单链表,再迭代一遍,如果当前指针cur是空的,则赋值双向链表前面的值,否则cur的next指针赋值最前面的值。

贴出代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
import java.util.LinkedList;
class Solution {
    public void reorderList(ListNode head) {
        LinkedList<ListNode> queue = new LinkedList<>();
        ListNode cur = head;
        while(cur != null){
            queue.addLast(cur);
            cur = cur.next;
        }
        while(!queue.isEmpty()){
            if(cur == null){
                cur = queue.pollFirst();
            }else{
                cur.next = queue.pollFirst();
                cur = cur.next;
            }
            cur.next = queue.pollLast();
            cur = cur.next;
        }
        if(cur != null){
            cur.next = null;
        }
    }
}

原文地址:https://www.cnblogs.com/Tu9oh0st/p/10843162.html

时间: 2024-10-31 20:51:58

143. 重排链表的相关文章

Leetcode 143.重排链表

重排链表 给定一个单链表 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. 1 public class Solution{ 2

99. 重排链表

99. 重排链表 难度系数 中等 通过率 24% 描述 笔记 数据 评测 给定一个单链表L: L0→L1→-→Ln-1→Ln, 重新排列后为:L0→Ln→L1→Ln-1→L2→Ln-2→- 必须在不改变节点值的情况下进行原地操作. 您在真实的面试中是否遇到过这个题? Yes 样例 给出链表 1->2->3->4->null,重新排列后为1->4->2->3->null /** * Definition of ListNode * class ListNode

GPLT天梯赛 L2-022. 重排链表

L2-022. 重排链表 时间限制 500 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个单链表 L1→L2→...→Ln-1→Ln,请编写程序将链表重新排列为 Ln→L1→Ln-1→L2→....例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3. 输入格式: 每个输入包含1个测试用例.每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (<= 105).结点的地址是5位非负整数,NULL地址用-

[leetcode]143. Reorder List重排链表

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: G

L2-2 重排链表 (25 分)

给定一个单链表 L?1??→L?2??→?→L?n−1??→L?n??,请编写程序将链表重新排列为 L?n??→L?1??→L?n−1??→L?2??→?.例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3. 输入格式: 每个输入包含1个测试用例.每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (≤).结点的地址是5位非负整数,NULL地址用−表示. 接下来有N行,每行格式为: Address Data Next 其中Address是结点地址:Data是该结

L2-2 重排链表 (25 分)

给定一个单链表 L?1??→L?2??→?→L?n−1??→L?n??,请编写程序将链表重新排列为 L?n??→L?1??→L?n−1??→L?2??→?.例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3. 输入格式: 每个输入包含1个测试用例.每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (≤).结点的地址是5位非负整数,NULL地址用−表示. 接下来有N行,每行格式为: Address Data Next 其中Address是结点地址:Data是该结

天梯 - 重排链表(模拟链表操作)

给定一个单链表 L?1??→L?2??→?→L?n−1??→L?n??,请编写程序将链表重新排列为 L?n??→L?1??→L?n−1??→L?2??→?.例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3. 输入格式: 每个输入包含1个测试用例.每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (≤105).结点的地址是5位非负整数,NULL地址用−表示. 接下来有N行,每行格式为: Address Data Next 其中Address是结点地址:Data

lintcode 99重排链表

描述 给定一个单链表L: L0→L1→-→Ln-1→Ln, 重新排列后为:L0→Ln→L1→Ln-1→L2→Ln-2→- 必须在不改变节点值的情况下进行原地操作. 样例 思路 先将链表整体一分为二,然后将后半段链表逆序,再依次插入前半段节点中. /** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val;

重排链表

题目描述:给定一个单链表L: L0→L1→-→Ln-1→Ln, 重新排列后为:L0→Ln→L1→Ln-1→L2→Ln-2→-必须在不改变节点值的情况下进行原地操作 样例:给出链表1->2->3->4->null,重新排列后为1->4->2->3->null. 将L0,L1; L1,Ln-1;...排在一起,其实和回文链表(详见:点击打开链接)的逻辑是一样的,不同的是,回文链表是比较值,这里是通过"摘链"和"链接"的方法