反轉鏈表的golang實現


問題:反轉一個單鏈表。

輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL

首先先認識一下鏈表這個數據結構:

鏈表節點中有兩個元素:

  • 指針
type ListNode struct {
    Val  int
    Next *ListNode
}

Next指向下一個節點

那么這道題其實就是把指針指向前一個節點

位置調換次數 pre cur whole
0 nil 1->2->3->4->5 1->2->3->4->5
1 1->nil 2->-3>->4->5 2->3->4->5->1->nil
2 2->1->nil 3->4->5 3->4->5->2->1->nil
3 3->2->1->nil 4->5 4->5->3->2->1->nil
4 4->3->2->1->nil 5 5->4->3->2->1->nil

可以看出來

  • pre是cur的最前面那位(pre = cur)
  • cur就是當前位的后面鏈表元素(cur = cur.Next)
  • cur.Next肯定是接pre(cur.Next = pre)
完整代碼:
package main

import "fmt"

//鏈表節點
type ListNode struct {
    Val  int
    Next *ListNode
}

//反轉鏈表的實現
func reversrList(head *ListNode) *ListNode {
    cur := head
    var pre *ListNode = nil
    for cur != nil {
        pre, cur, cur.Next = cur, cur.Next, pre //這句話最重要
    }
    return pre
}

func main() {
    head := new(ListNode)
    head.Val = 1
    ln2 := new(ListNode)
    ln2.Val = 2
    ln3 := new(ListNode)
    ln3.Val = 3
    ln4 := new(ListNode)
    ln4.Val = 4
    ln5 := new(ListNode)
    ln5.Val = 5
    head.Next = ln2
    ln2.Next = ln3
    ln3.Next = ln4
    ln4.Next = ln5

    pre := reversrList(head)
    fmt.Println(pre)
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM