反转链表
剑指Offer 24 反转链表 [easy]
题解1
- 思路:栈
- 时间复杂度:O(n) O(2 * n) 入栈 + 出栈
- 空间复杂度:O(n) 栈空间
实现
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */
/** * @param {ListNode} head * @return {ListNode} */
var reverseList = function(head) {
// 预处理
if(!head) return head;
let stack = [head];
let curr = head;
while(curr.next){
stack.push(curr = curr.next);
}
let result = stack.pop();
while(curr.next = stack.pop() || null) curr = curr.next;
return result;
};
题解2
- 思路:双引用(指针)法 pre, curr
- 时间复杂度:O(n)
- 空间复杂度:O(1) 指针空间
实现
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */
/** * @param {ListNode} head * @return {ListNode} */
var reverseList = function(head) {
// 预处理
if(!head) return head;
// 双引用法
let pre = head;
let curr = pre.next;
pre.next = null; // 反转链表尾指向null
while(curr){
let temp = curr;
curr = curr.next;
temp.next = pre;
pre = temp;
}
return pre;
};
还没有评论,来说两句吧...