題目
反轉一個單鏈表。
示例:
輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL
進階:
你可以迭代或遞歸地反轉鏈表。你能否用兩種方法解決這道題?
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reverse-linked-list
分析
反轉鏈表,一遍循環,爲了讓2指向1,又不丟失下一個節點,就要讓2的下一個節點先取出來存爲temp,然後在把2節點指向前一個節點pre。此時將下一個節點temp取出,賦值給當前節點,讓其繼續前進。而pre節點則要存儲爲當前節點。這樣下一輪的時候,就可以繼續賦值了。最後走到頭的時候,節點也就反轉過來了。
解法
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
cur := head
var pre *ListNode
for cur != nil {
var temp = cur.Next
// 將當前節點指向前一個節點
cur.Next = pre
pre = cur
cur = temp
}
return pre
}