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?