输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
まず、リンク リストのデータ構造を理解しましょう:
リンク リスト ノードには 2 つの要素があります:
type ListNode struct { Val int Next *ListNode }
Next は次のノードを指します
そして、この質問は実際にはポインターを前のノードを指すことになります。
位置変更の数 | pre | cur | 全体 |
---|---|---|---|
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->2->1->nil | 4->5 | 4->5->3->2->1->nil | |
##4->3->nil 2->1->ゼロ | 5 | 5->4->3->2->1->ゼロ |
pre は cur の最前面の要素 (pre = cur)
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) }
以上がGolang で逆リンクリストを実装する方法を説明した記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。