206. Reverse Linked List

Leetcode

https://leetcode.com/problems/reverse-linked-list/arrow-up-right

題目

Given the head of a singly linked list, reverse the list, and return the reversed list.

Example 1:

Input: head = [1,2,3,4,5]
Output: [5,4,3,2,1]

Example 2:

Input: head = [1,2]
Output: [2,1]

Example 3:

Input: head = []
Output: []

解答

  • 方法一

用三個指標 last, before, pointer 達到反轉 linked list

For example:

linked list = [1, 2, 3];

Init

1

2

3

last, before

pointer

First round

1

2

3

last

before

pointer

before.next = last = null

Second round

1

2

3

last = before

before

pointer

before.next = last = 1

Third round

1

2

3

last = before

before

before.next = last = 2

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

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

  • 方法二

紀錄 前一個節點(prev)後一個節點(next) 以達到反轉列表的目的

範例:head = [1,2]

  • 初始值

  • 第一輪 - head = 1

  • 第二輪 - head = 2

做完兩輪後,會發現 head 已經到終點了,而整個反轉列表的開頭就是 prev

  • 方法三

按照方法二的思路,但只是改成遞迴 recursion 的方式

參考資料

Last updated