首先,我当前的代码:
class linkedlist(object):
def __init__(self, value, next = None):
self.value = value
self.next = next
def traverse(self):
field = self
while field != None:
print(field.value)
field = field.next
def equal(self, other):
while self and other and self.value== other.value:
self = self.next
other = other.next
if self and other:
if self.value!= other.value:
return False
else:
return True
我的任务是比较两个链表。如果它们相同,则“相等”功能应返回“真”,如果不是,则应返回“假”。功能头必须保持这种状态。
我尝试自己寻找解决方案3小时,现在我已经死了。谁能给我一些提示/帮助?我不是最好的程序员,所以很抱歉:(
答案 0 :(得分:0)
您快到了。您正在使用正确的策略遍历两个链表,并跳过所有相等的配对元素(您的第一个循环)。
您出问题的地方是您不处理所有可能出现的情况。现在您知道两个链接列表的前缀在0到N个相等的元素之间。现在,您可以考虑以下四个选项之一:
self
已用尽,但other
未耗尽; other
更长,因此不相等,请返回False
other
已用尽,但self
未耗尽; self
更长,因此不相等,请返回False
self
和other
仍具有更多元素,但是两个链接列表的下一个元素具有不相等的值。返回False
self
和other
都已用尽,因此长度相等。它们的前缀相等,因此链接列表相等。返回True
。您现在仅处理选项3。鉴于4个场景中有3个导致了return False
,因此仅测试场景4会更容易:
if not self and not other:
return True
return False
或者,作为完整方法:
def equal(self, other):
while self and other and self.value == other.value:
self = self.next
other = other.next
if not self and not other:
return True
return False