Leetcode No.143 重排链表
Posted AI算法攻城狮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode No.143 重排链表相关的知识,希望对你有一定的参考价值。
一、题目描述
给定一个单链表 L 的头节点 head ,单链表 L 表示为:
L0 → L1 → … → Ln-1 → Ln
请将其重新排列后变为:
L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入: head = [1,2,3,4]
输出: [1,4,2,3]
示例 2:
输入: head = [1,2,3,4,5]
输出: [1,5,2,4,3]
提示:
链表的长度范围为 [1, 5 * 10^4]
1 <= node.val <= 1000
二、解题思路
题目的意图是想要重组链表, 按照[头]->[尾]->[头]->[尾]...的方式重新排列
因为为单向链表, 不能从尾部逆序推出前一个节点
所以比较容易想到的是借助栈的\'FILO\'的特性, 逐步倒序取出尾部节点重新拼接链表
如果借助链表实现, 则需要重点考虑的问题是, 重组链表的过程中, 在何时需要停止
重组的停止条件设定:
1、当链表节点个数为奇数时,顺序遍历的当前节点和逆序遍历的节点相同时,停止。
以上是关于Leetcode No.143 重排链表的主要内容,如果未能解决你的问题,请参考以下文章