到目前为止,这就是我现在所拥有的
class X:
def __init__(self,value,next=None):
self.value = value
self.next = next
def linkedlist(l):
if l == []:
return None
beg = end = X(l[0])
for v in l[1:]:
end.next = X(v)
end = end.next
return beg
lst1 = linkedlist(['a', 'b', 'c''])
lst2 = linkedlist(['a', 'b', 'c'])
lst3 = linkedlist(['c', 'a', 'b'])
我正在尝试创建一个递归函数,它将确定两个链接列表lst 1和lst 2是否相同。如果是,则返回True,否则返回False。
def is_same(lst1, lst2):
if lst1.next == None or lst2.next == None:
return None
else:
if lst1.next == lst2.next:
return X(is_same(lst1.next, lst2.next))
else:
return True
我知道我的递归函数是错误的,但我遇到了麻烦,因为它一直给我错误。 " is_same"每次放入时函数都返回True:
is_same(lst1, lst2)
is_same(lst1, lst3) # This should be False
答案 0 :(得分:4)
有一些问题。
None
)。lst1.next == lst2.next
比较节点,而不是值。X
。我想你想要这样的东西
def is_same(lst1, lst2):
return not lst1 and not lst2 \
or lst1 and lst2 \
and lst1.value == lst2.value \
and is_same(lst1.next, lst2.next)
或者,您可能希望为了清晰起见而放弃托管(如果有人不知道and
和or
的操作顺序。
def is_same(lst1, lst2):
return (not lst1 and not lst2) or (
lst1 and lst2
and lst1.value == lst2.value
and is_same(lst1.next, lst2.next)
)
编辑:或者,对于更少的布尔操作,
def is_same(lst1, lst2):
if lst1:
return lst2 \
and lst1.value == lst2.value \
and is_same(lst1.next, lst2.next)
return not lst2