2022/01/[路飞][LeetCode]143_重排链表/index

看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~

谁能九层台,不用累土起!

题目地址

题目

给定一个单链表 L 的头节点 head ,单链表 L 表示为:

1
L0 → L1 → … → Ln - 1 → Ln

请将其重新排列后变为:

1
L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …

不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:

image.png

1
2
输入: head = [1,2,3,4]
输出: [1,4,2,3]

示例 2:

image.png

1
2
输入: head = [1,2,3,4,5]
输出: [1,5,2,4,3]

提示:

  • 链表的长度范围为 [1, 5 * 104]
  • 1 <= node.val <= 1000

解题思路

  • 我们先遍历一次链表利用数组来存储每个节点
  • 然后遍历数组正序的同时我们也倒序遍历
  • 当没有到数组的中间位置的时候,正序的每个节点的next指向倒序遍历到的节点
  • 倒序遍历到的节点的next指向正序的下一个元素的节点
  • 最后我们输出数组的第0

解题代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var reorderList = function(head) {
let arr = []
while(head){
let a = head
head = head.next
a.next = null
arr.push(a)
}
let i =0
let j =arr.length-1
while(i<j){
arr[i].next = arr[j]
if(i+1<j){
arr[j].next = arr[i+1]
}
i++
j--
}
return arr[0]
};

如果我们总在等待绝对的一切就绪,那我们将永远无法开始。

文章作者: Joker
文章链接: https://qytayh.github.io/2022/01/[%E8%B7%AF%E9%A3%9E][LeetCode]143_%E9%87%8D%E6%8E%92%E9%93%BE%E8%A1%A8/index/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joker's Blog