简介
题目链接 Leetcode 234. Palinedrome Linked List
这篇文章的主要目的是借此题的递归解法来对递归的回溯特性做一个简单的探讨。递归解法是一个时间复杂度为O(N)
,空间复杂度也为O(N)
的解法。至于题目中的追问:“能否用O(1)
的空间和O(N)
的时间完成?”这里不做讨论。
注意:文章中一切注解皆为Python代码
理解题目
题目非常简单。给定一个单向链表,判断链表中的值按当前顺序是否形成一个回文串。
如何判断是否为回文串
有多种判断回文串的方式,这里用一个Python列表 (list
) 来举例,假设有列表 p = [1, 2, 2, 1]
,那么判断它是否为回文串的方法有:
- 判断正序的
p
和倒序的p
是否相等,即True if p == p[::-1] else False
- 取列表的首尾两处初始化指针,两两对比,如果相等,就向中间靠拢,否则返回
False
,两指针成功相遇即证明列表为回文串left, right = 0,</