Leetcode Note: Go - Reverse Linked List

Reverse Linked List - LeetCode
https://leetcode.com/problems/reverse-linked-list/

  • Go 言語で取り組んだメモ

所感

  • 与えられた Linked List を逆順にして return

回答

8ms Golang solution - LeetCode Discuss
https://leetcode.com/problems/reverse-linked-list/discuss/58293/8ms-Golang-solution

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */

func reverseList(head *ListNode) *ListNode {
	var prev *ListNode
	for head != nil {
		head.Next, prev, head = prev, head, head.Next
	}
	return prev
}
  • var prev *ListNode
    • ListNode を扱う prev 変数を定義
  • for head != nil { 引数で渡ってくる Node が nil じゃないか✅
    • head.Next, prev, head = prev, head, head.Next
      • head.Next = prev
        • 次に reverseList に渡される Next を空の ListNode にしておく?
        • 終端になるハズの nil を最初に入れて逆順にしていくということかな。自信なし
      • prev = head
        • return する prev に head を代入
        • 操作の反転
      • head = head.Next
        • 現在の head と次の head を入れ替える
        • 再帰呼び出しの繰り返しを進めるためのものという理解
  • return prev
    • head が nil だったら空の ListNode が入った prev
    • head が nil じゃなければ head が代入された prev

【LeetCode】206. Reverse Linked Listを解く
https://zenn.dev/ike_pon/articles/ec970cc20e7ff05c850b

色々調べてみたが腹落ちできず。リスト操作のイメージが付いていないのが原因かもしれない。