第一个 if 检查是为了确保左即起始节点和右即结束节点数据如果它们不匹配则返回 false,但控制流不会在函数外返回,而是保持与其他节点匹配并为其他节点运行 else 条件其他情况。
class Node:
def __init__(self,data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
self.size = 0
self.tail = None
self.left = None
def palindromeHelper(self,right):
if(right == None):
return True
rres = self.palindromeHelper(right.next)
print(self.left.data, right.data)
if self.left.data != right.data:
return False
else:
self.left = self.left.next
return True
def isLinkedListPaliendrome(self):
right = self.left = self.head
print(self.palindromeHelper(right))
list4 = LinkedList()
list4.addLast('b')
list4.addLast('a')
list4.addLast('c')
list4.addLast('a')
list4.addLast('b')
list4.addLast('a')
list4.isLinkedListPaliendrome()
Output:
b a
b b
a a
c c
a a
b b
True
答案 0 :(得分:0)
您的总体策略是有道理的:
问题是您忽略了中间 False 结果。考虑这个输入:
abc
请注意,没有字母出现两次。让我们看看会发生什么:
因此,任何具有唯一起始字母的字符串都将返回 True。其实很多类型的字符串都会返回True,因为算法只考虑最后的比较,忽略中间的失败。
您需要做的是使用中间结果rres
。如果任何步骤返回 False,则整个调用堆栈也需要返回 False。