Golangでリストを逆にする方法は何ですか?
「Golangでは、リストを反転させるために、反復と再帰の2つの方法が使える。」
- 迭代法はリンクリストを巡回し、ポインターを1つずつ変更してリンクリストを反転させる方法です。
- 型ListNodeを定義します:
type ListNode struct {
Val int
Next *ListNode
}func reverseList(head *ListNode) *ListNode {
var prev *ListNode
curr := head
for curr != nil {
next := curr.Next
curr.Next = prev
prev = curr
curr = next
}
return prev
} - 再帰的手法:
再帰的手法は、再帰的にリストのサブリストを反転させ、隣接するノードのポインタを変更することで、リストを反転させる手法です。 - ListNode構造体は、ValとNextポインタを持っています。func reverseList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
newHead := reverseList(head.Next)
head.Next.Next = head
head.Next = nil
return newHead
}
どの方法を使用しても、リストが空であるか、一つのノードしかない場合、または反復法で次のノードへの参照を常に保持することに注意する必要があります。