持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
一、剑指Offer 06-从尾到头打印链表
(一)题目内容
- 题目网址:剑指Offer 06-从尾到头打印链表
- 题目内容描述如下:
(二)解题方法
- 初始化一个空数组存储返回结果,创建一个指针head,初始时指向链表的头节点
- 从头遍历链表节点,当head指针指向的元素非空时,将从栈弹出的当前节点的值插入到数组头部,使用head变量记录当前节点的下一个节点,
- 最后返回数组
- 时间复杂度:。正向遍历一遍链表,然后从栈弹出全部节点,等于又反向遍历一遍链表。
- 空间复杂度:。额外使用一个栈存储链表中的每个节点。
var reversePrint = function(head) {
let result = []
while(head!=null){
result.unshift(head.val);
head = head.next;
}
return result;
};
二、剑指Offer 24-反转链表
(一)题目内容
- 题目网址:剑指Offer 24-反转链表
- 题目内容描述如下:
(二)解题方法
-
使用迭代方法求解:首先创建temp指针指向链表头节点,遍历链表,将当前指针cur指向temp,使用temp遍历指向当前节点的下一个节点
-
然后将当前节点的下一个节点指向反转后链表的表头
-
时间复杂度:,其中 是链表的长度,需要遍历链表一次。
-
空间复杂度:。
-
还有一种用递归求解,可参考文章:反转链表
-
题解代码如下:
var reverseList = function(head) {
let pre = null;
let cur = null;
let temp = head;
while(temp!=null){
cur = temp;
temp = temp.next;
cur.next = pre;
pre = cur;
}
return cur;
};