Python 同时递归两个链表

Python 同时递归两个链表,python,recursion,linked-list,Python,Recursion,Linked List,我目前正在尝试创建一个递归的两个链表函数,该函数同时返回链表值的单个值 例如,有两个链表:ll1->a、b、c和ll2->d、e、f 它将递归地返回a、d、b、e、f(下面是我尝试执行的代码段,这将更有意义!) 这是我的递归链表函数,我到目前为止写的 def recursive_lls(ll1: LinkedList, ll2: LinkedList) -> LinkedList: if ll1 == None or ll2 == None: return None

我目前正在尝试创建一个递归的两个链表函数,该函数同时返回链表值的单个值

例如,有两个链表:ll1->a、b、c和ll2->d、e、f

它将递归地返回a、d、b、e、f(下面是我尝试执行的代码段,这将更有意义!)

这是我的递归链表函数,我到目前为止写的

def recursive_lls(ll1: LinkedList, ll2: LinkedList) -> LinkedList:
    if ll1 == None or ll2 == None:
        return None
    else:
        alternate = LinkedList(ll1.value, recursive_lls(ll1.next, ll2.next))
    return alternate

ll1 = convert_linked_list(['n',3 ,'z','d'])
ll2 = convert_linked_list(['w','x',7 ,'g','e',1])
print(convert_linked_str(recursive_lls(ll1,ll2)))
它将给我一个结果:

n->3->z->d->None
但预期的结果是:

n->w->3->x->z->7->d->g->e->1->None
  • 结果始终以ll1头值开始
  • ll1和ll2的长度可能不均匀,如果ll2的值用完了,那么ll1将继续运行(可以是相反的方式)
用我目前拥有的东西来处理这个递归函数的最佳方法是什么?我知道使用类而不是助手函数会更容易

  • 必须是递归的,没有循环
  • 无花式进口(拉链等)
同样,如果它的单个递归链表函数,这就是我在下面写的。但是有了两个链表,我真的很困惑该怎么做

def single_recursive_ll(ll):
    if ll == None:
        return None
    elif ll.next == None:
        return LN(ll.value)
    else:
        return_ll = LN(ll.value, single_recursive_ll(ll.next))
        if return_ll.value == return_ll.next.value:
            return_ll = return_ll.next
return return_ll 

您的
递归函数有一些问题

  • ll1
    ll2
    None
  • 在调用
    LinkedList
    时,
    recursive\u lls
    不会在第一个参数位置替换链接列表。此外,它总是推进第二个链表,因此最终得到的是
    ll1
    中的最小链表,其长度不超过
    ll2
  • 修复方法如下:

  • 调整递归调用的基本大小写,使两个链表都完全缩进
  • 调整递归调用以确保列表实际上是交替的
  • 下面的代码就是这样做的

    def recursive_lls(ll1: LinkedList, ll2: LinkedList) -> LinkedList:
        if ll1 == None:
            return ll2
        if ll2 == None:
            return ll1
        else:
            alternate = LinkedList(ll1.value, recursive_lls(ll2, ll1.next))
        return alternate
    
    测试显示它现在按预期运行:

    >>> ll1 = convert_linked_list(['n',3 ,'z','d'])
    >>> ll2 = convert_linked_list(['w','x',7 ,'g','e',1])
    >>> print(convert_linked_str(recursive_lls(ll1,ll2)))
    n->w->3->x->z->7->d->g->e->1->None
    

    您的
    递归函数有一些问题

  • ll1
    ll2
    None
  • 在调用
    LinkedList
    时,
    recursive\u lls
    不会在第一个参数位置替换链接列表。此外,它总是推进第二个链表,因此最终得到的是
    ll1
    中的最小链表,其长度不超过
    ll2
  • 修复方法如下:

  • 调整递归调用的基本大小写,使两个链表都完全缩进
  • 调整递归调用以确保列表实际上是交替的
  • 下面的代码就是这样做的

    def recursive_lls(ll1: LinkedList, ll2: LinkedList) -> LinkedList:
        if ll1 == None:
            return ll2
        if ll2 == None:
            return ll1
        else:
            alternate = LinkedList(ll1.value, recursive_lls(ll2, ll1.next))
        return alternate
    
    测试显示它现在按预期运行:

    >>> ll1 = convert_linked_list(['n',3 ,'z','d'])
    >>> ll2 = convert_linked_list(['w','x',7 ,'g','e',1])
    >>> print(convert_linked_str(recursive_lls(ll1,ll2)))
    n->w->3->x->z->7->d->g->e->1->None