题解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; };