未分類

Reverse Linked List

Reverse Linked List

Reverse a singly linked list.

提示 解題應用
LinkedList Pointer

Default:

1
2
3
4
5
6
7
8
9
10
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseList(head *ListNode) *ListNode {
}

解答思路:

僅需要一次的遍歷就可以同時反轉整個LinkedList,想好每一個操作的流程就可以很輕易的完成,只是要記得在將節點的位置移動到下一個之前,要先記錄前一個節點的位置,以繼續將其目標再指向更前方。

程式碼解說:

這邊我以flag來記錄目前正在處理的節點,以方便我們將整個節點移動到下一個時,能繼續將前一個節點的目標再往前指向,而preNode就是其所指向的位置,既然是反轉LinkedList,那麼原本第一個節點會成為最後一個,而最後一個節點的下一個自然就是空節點nil,而flag指定完畢往下移動後,自然preNode也就跟著往下移變到flag的位置,最後處理完最後一個節點時,回傳當下處理的節點位置,也就是原本最後一個的節點變成第一個節點且處理完畢的flag

1
2
3
4
5
6
7
8
9
var flag *ListNode
var preNode *ListNode
for head != nil {
flag = head
head = head.Next
flag.Next = preNode
preNode = flag
}
return flag

完整程式碼:

1
2
3
4
5
6
7
8
9
10
11
func reverseList(head *ListNode) *ListNode {
var flag *ListNode
var preNode *ListNode
for head != nil {
flag = head
head = head.Next
flag.Next = preNode
preNode = flag
}
return flag
}

總結:

如果要反轉一個LinkedList,記得在將節點的位置移動到下一個之前,要先記錄前一個節點的位置,以繼續將其目標再指向更前方。

分享到