题目:
![在这里插入图片描述](https://img-blog.csdnimg.cn/51ff4a72cc4d4a688b7d6352370f86d0.png)
解题1:傻瓜式解法
var reverseList = function(head) {
if (!head) {
return head
}
const list = [];
while (head) {
list.unshift(head.val);
head = head.next;
}
const p = {};
let k = p;
for (i in list) {
k.val = list[i];
k.next = i == list.length - 1? null: {};
k = k.next;
}
return p;
};
- 第一次做这个题的时候,就是用的这个方法,暴力傻瓜式解法。
- 1.遍历原链表,把值挨个unshift到列表中。
- 2.遍历列表,创建新链表。
- 3.要注意的是,在这方式,需要考虑到空节点问题,空节点只有返回原节点,不能用空对象,会报错,
- 4.注意不要用
===
。
解题2: 优化一下
var reverseList = function(head) {
let p1 = head;
let p2 = null;
while (p1) {
let t = p1.next;
p1.next = p2;
p2 = p1;
p1 = t;
}
return p2;
};
- 两个指针,主要是理解这个思路,很多链表相关题中都会用到这个思路。
- 栈