如何比较python 3.7中的两个链表?

时间:2019-01-27 12:55:28

标签: python python-3.x linked-list

首先,我当前的代码:

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小时,现在我已经死了。谁能给我一些提示/帮助?我不是最好的程序员,所以很抱歉:(

1 个答案:

答案 0 :(得分:0)

您快到了。您正在使用正确的策略遍历两个链表,并跳过所有相等的配对元素(您的第一个循环)。

您出问题的地方是您不处理所有可能出现的情况。现在您知道两个链接列表的前缀在0到N个相等的元素之间。现在,您可以考虑以下四个选项之一:

  1. self已用尽,但other未耗尽; other更长,因此不相等,请返回False
  2. other已用尽,但self未耗尽; self更长,因此不相等,请返回False
  3. selfother仍具有更多元素,但是两个链接列表的下一个元素具有不相等的值。返回False
  4. selfother都已用尽,因此长度相等。它们的前缀相等,因此链接列表相等。返回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