首页 > 解决方案 > 检查两个节点链并计算它们是否具有相同的数据

问题描述

我有一个函数,它检查给定的两个节点链并确定这两个节点链是否以相同的顺序包含相同的数据值。如果有,则函数返回 True,否则返回 False。我需要使用递归来编写这个函数。

这是我的尝试:

def check_chains(chain1, chain2):
    if chain1 is None or chain2 is None:
        return False
    else:
        if chain1.get_data() == chain2.get_data():
            check_chains(chain1.get_next(), chain2.get_next())
            return True
        else:
            return False

即使节点链中有不同的数据值,这个也返回 True。

下面是一些测试用例:

1. Test case 1 (test passed)

    chain1 = N.node(5 ,N.node(10,N.node(-15, N.node(1))))
    chain2 = N.node(5 ,N.node(10,N.node(-15, N.node(1))))
    expected = True
    
    result = a7q8.check_chains(chain1, chain2)
    
    if result!=expected:
        print('Test failed')

2. test 2 (test failed, expected false but returned True)

    chain1 = N.node(5 ,N.node(10,N.node(-15, N.node(1))))
    chain2 = N.node(5 ,N.node(10,N.node(7, N.node(1))))
    expected = True
    
    result = a7q8.check_chains(chain1, chain2)
    
    if result!=expected:
        print('Test failed')

标签: pythonrecursion

解决方案


你的逻辑在两个地方有点缺陷:

def check_chains(chain1, chain2):
    # base case for equality was missing!
    if chain1 is chain2 is None:  
        return True
    if None in (chain1, chain2):  # rewrote your condition less verbosely
        return False
    if chain1.get_data() == chain2.get_data():
        # recursive result was never used!
        return check_chains(chain1.get_next(), chain2.get_next())
    return False

else当您从每个if-block返回时,我还删除了一些虚假的 .


推荐阅读