leetcode 探索 鏈表 反轉鏈表

題目

反轉一個單鏈表。
示例:

輸入: 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
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章