Leetcode Note: Go - Palindrome Linked List
Palindrome Linked List - LeetCode
https://leetcode.com/problems/palindrome-linked-list/
- Go 言語で取り組んだメモ
所感
- 回文になっているリンクリストか判定する
回答
Golang solution using two pointers - LeetCode Discuss
https://leetcode.com/problems/palindrome-linked-list/discuss/64572/Golang-solution-using-two-pointers
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func isPalindrome(head *ListNode) bool {
// nil チェック
if head == nil || head.Next == nil {
return true
}
single, double := head, head
var prev, prev2 *ListNode
for {
double = double.Next.Next
// シングルノードが前のリストを反転
prev = single
single = single.Next
prev.Next = prev2
prev2 = prev
// nil チェック
if double == nil || double.Next == nil {
break
}
}
// 必要なノード数が均等になるように調整
left, right := prev, single
if double != nil {
right = right.Next
}
for left != nil && right != nil {
// 左右のノードが不一致なら false を返す
if left.Val != right.Val {
return false
}
left, right = left.Next, right.Next
}
return true
}