284 字
1 分钟
LeetCode-234.回文链表
链表
给你一个单链表的头节点
head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。
示例 1:
输入:head = [1,2,2,1]输出:true示例 2:
输入:head = [1,2]输出:false
自己的解法(哈希+左右指针)
手撕,单纯做出来还是很简单的,不过13ms确实有点慢
/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func isPalindrome(head *ListNode) bool { if head == nil { return true }
cur := head res := []int{} for cur != nil { res = append(res, cur.Val) cur = cur.Next }
left, right := 0, len(res)-1 for left < right { if res[left] != res[right] { return false } left++ right-- }
return true}很有趣的解法(快慢指针+反转链表+左右指针)
func isPalindrome(head *ListNode) bool { if head == nil || head.Next == nil { return true }
slow, fast := head, head for fast != nil && fast.Next != nil { slow = slow.Next fast = fast.Next.Next }
var pre *ListNode cur := slow for cur != nil { next := cur.Next cur.Next = pre pre = cur cur = next }
left := head right := pre for right != nil { if right.Val != left.Val { return false }
left = left.Next right = right.Next }
return true} LeetCode-234.回文链表
https://sheep44044.github.io/posts/算法/链表/leetcode-234回文链表/

