代码
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function (head) {
let p1 = head;
let p2 = null;
while(p1) {
const tmp = p1.next // 保存p1.next
p1.next = p2
p2 = p1
p1 = tmp
}
return p2
};
时间空间复杂度
- 时间复杂度 O(n),n为链表长度。
- 空间复杂度O(1)
思路
-
两个元素a和b反转
b.next = a
因此,后面的元素只需指向前面的元素。
-
双指针遍历,得到
所有的前面元素
和所有的后面元素
。// 双指针遍历 while(p1) { // p2代表当前元素 p2 = p1 // p1代表当前元素的下一个元素 p1 = p1.next }
-
每次循环,将后面的元素只需指向前面的元素即可。
p1.next = p2