LeetCode 234. 回文链表(Golang)


请判断一个链表是否为回文链表。

示例 1:

输入: 1->2
输出: false

示例 2:

输入: 1->2->2->1
输出: true

进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

思路:遍历链表,将所有节点按顺序存储到map集合中,通过map的键从两头开始遍历对比,值不相等返回false

func isPalindrome(head *ListNode) bool {
	m := make(map[int]*ListNode)
	i := 0
	m = TraverListNode(head, m, i)
	start := 0
	end := len(m) - 1
	for start <= end {
		if m[start].Val != m[end].Val {
			return false
		}
		start++
		end--
	}
	return true
}

func TraverListNode(head *ListNode, m map[int]*ListNode, i int) map[int]*ListNode {
	if head == nil {
		return m
	}
	m[i] = head
	i++
	return TraverListNode(head.Next, m, i)
}

文章作者: Jack Li
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jack Li !
评论
  目录