当前位置: 首页 > 知识库问答 >
问题:

递归返回单链表的子列表

曾丰茂
2023-03-14

我试图递归返回单链表的子列表。

例:列表=3-

sub(list,1,2)应返回4-

参数1-开始索引

参数2-子列表的长度

我有点麻烦,因为我的代码只返回子列表的最后一个元素,而不是整个子列表。

def sub(list, start, length) -> Node:
    if list is None:
        return None
    elif start <= 0:
        if length ==1:
            list.next = None
            return list
        else:
            return sub(list.next, start - 1, length - 1)
    else:

        return sub(list.next, start - 1, length)

共有1个答案

晁文斌
2023-03-14

遍历主结构时,可以在sub函数中使用一个参数来存储累积的子列表:

def sub(lst, s, e, c = 0, new_l = None):
   if c >= e:
      return new_l
   if lst is None:
      raise IndexError('index out of bounds')
   return sub(lst.next, s, e, c = c+1, new_l = None if c + 1 <= s else getattr(new_l, 'add_node', Lst)(lst.value))

Lst实施:

class Lst:
   def __init__(self, val=None):
      self.value, self.next = val, None
   def add_node(self, val):
      if self.value is None:
         self.value = val
      elif self.next is None:
         self.next = Lst(val)
      else:
         self.next.add_node(val)
      return self
   def __repr__(self):
      return f'{self.value}{"" if self.next is None else " -> "+repr(self.next)}'


l = Lst()
for i in range(10):
   l.add_node(i)

print(sub(l, 0, 4))
print(sub(l, 2, 7))
print(sub(l, 5, 12))

输出:

0 -> 1 -> 2 -> 3
2 -> 3 -> 4 -> 5 -> 6
  File "<stdin>", line 6, in sub
  [Previous line repeated 7 more times]
File "<stdin>", line 5, in sub
IndexError: index out of bounds
 类似资料:
  • 问题内容: def foo(a): a.append(1) if len(a) > 10: print a return a else: foo(a) 为什么此递归函数返回None(请参见下面的脚本)?我不太明白我在做什么错。 问题答案: 您不会在该子句中返回任何内容:

  • 我做了一个使用递归方法反转单链表的函数。然而,我在执行下面的代码时遇到了一些困难: 我应该如何在ReverseCursive函数/方法中传递第二个参数,以便执行它? 作为第二个参数,我想简单地传递链表的头节点。但是我不知道如何从类的init方法中获取头节点linked_list 我试了几件事,但都解决不了。也许我不太擅长OOP概念。有人能帮我解决这个问题吗?

  • 我需要为链表队列实现一个toString()递归方法。我知道我的toString方法在我上周做的一个链表实现中工作得很好,所以我在处理它的队列方面出了问题。 我的QueueList的toString方法: 以及我的构造函数,例如QueueList: 我试图用这个测试看看里面发生了什么: 与输出 我意识到这是因为我说的是前面的在方法的递归部分,但即使我将其更改为,我的输出是 这可能与我的排队和退队方

  • 最后一个函数返回15->20,然后组合为root.next->temp,但是在返回temp的步骤之后,为什么会返回根值。即10->15->20,而我希望只返回temp。 请找到代码,

  • 我是编程新手,从Python开始。我的问题是关于链表,我为链表写了一个类,我需要做的是有一个函数,一个输入作为指向列表头部的引用。据我所知,'linked_list.Head',其中linked_list是有问题的列表的名称。具体使用递归,我试图找到列表的长度作为这个函数的输出。下面是我的代码,我不太明白如何移动到下一个节点,并在本例中使用递归返回节点数。