Skip to main content

反转链表

Tips

题目类型: LinkedList

相关题目:

题目

反转一个单链表.

示例

输入: 1->2->3->4->5->NULL

输出: 5->4->3->2->1->NULL

题解

迭代法

对于 1->2->3->null 的反转, 实际上就变成了 null<-1<-2<-3, 因此初始化一个 prev 为 null, 让:

curr.next = prev
prev = curr

但是 curr.next = prev 这句会导致 curr.next 丢失了, 因为它已经被赋值给了 prev, 因此需要先将 curr.next 存储下来, 反转之后将 curr.next 赋值给 curr.

/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function (head) {
let prev = null

while (head) {
const tmp = head.next
head.next = prev
prev = head
head = tmp
}

return prev
}

时间复杂度: O(n), 其中 n 是链表的长度. 需要遍历链表一次.

空间复杂度: O(1).