64 - 反转链表

题目

反转一个单链表。

示例:

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

进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

解答

迭代

func reverseList(head *ListNode) *ListNode {
    if head == nil {
        return nil
    }
    if head.Next==nil{
        return head
    }
    var pre *ListNode
    cur := head
    for cur != null {
        temp := cur.Next
        cur.Next = pre
        pre = cur
        cur = temp
    }
    return pre
}

Runtime: 0 ms, faster than 100.00% of Go online submissions forReverse Linked List.

Memory Usage: 2.6 MB, less than 83.33% of Go online submissions forReverse Linked List.

https://leetcode.com/problems/reverse-linked-list/discuss/210873/javascript

var reverseList = function(head) {
    let pre = null
    while(head){
        const next = head.next
        head.next = pre
        pre = head
        head = next
    }
    return pre
};

Runtime: 64 ms, faster than 30.49% of JavaScript online submissions for Reverse Linked List.

Memory Usage: 35.1 MB, less than 50.00% of JavaScript online submissions for Reverse Linked List.

有趣的是,js里面不能把pre定为ListNode,即let pre = new Listnode()的话,会报错,head最后会指向undefined。

但go里面就不会,也不能令为null。可能是gc在起作用?

递归

func reverseList(head *ListNode) *ListNode {
    if head == nil || head.Next == nil {
        return head
    }
    result := reverseList(head.Next)
    head.Next.Next = head
    head.Next = nil
    return result
}

Runtime: 0 ms, faster than 100.00% of Go online submissions forReverse Linked List.

Memory Usage: 2.9 MB, less than 33.33% of Go online submissions forReverse Linked List.

假设是这个情况:$n1 > … > n{k-1} > nk > n{k+1} < … < n_m$

目前在$nk$,所以要把$n{k+1}$的next指向$n_k$,然后把$n_k$的next指向null

var reverseList = function (head) {
  if (!head || !head.next) {
    return head
  }
  let result = reverseList(head.next)
  head.next.next = head
  head.next = null
  return result
};

Runtime: 60 ms, faster than 56.09% of JavaScript online submissions for Reverse Linked List.

Memory Usage: 34.8 MB, less than 86.96% of JavaScript online submissions for Reverse Linked List.

Last updated

Was this helpful?