📜  使用递归为给定值K创建循环列表结构(1)

📅  最后修改于: 2023-12-03 15:06:59.093000             🧑  作者: Mango

使用递归为给定值K创建循环列表结构

循环列表是一种特殊的链表,其中最后一个元素的下一个节点是第一个元素,形成一个循环。创建循环列表通常需要遍历整个链表,找到最后一个元素,并将最后一个节点的下一个节点指向第一个节点。而使用递归可以更加简洁地实现这个过程。

实现步骤
  1. 确定递归终止条件。在本例中,当链表的最后一个元素创建完成时,需要将其下一个节点指向第一个节点,形成循环。
  2. 对于每个节点,创建后继节点并链接到当前节点。如果当前节点是最后一个元素,则链接到第一个节点。
  3. 在连接过程中,将当前节点保存到上一个节点的后继节点中,以便在下一次递归中使用。

实现以上步骤的递归函数如下:

class Node:
    def __init__(self, val):
        self.val = val
        self.next = None

def create_circular_list(head, k, count=1):
    if count == k:
        head.next = root
        return root
    else:
        root = Node(count)
        root.next = create_circular_list(head, k, count+1)
        return root

上述函数接受一个头节点head和给定的值k作为参数,创建k个具有连续值的节点,并将链表的最后一个元素的下一个节点指向第一个节点,形成循环。

示例

创建一个具有5个元素的循环链表,并输出节点值。

root = Node(1)  # 创建头节点
create_circular_list(root, 5)  # 创建循环列表
curr_node = root
for i in range(5):
    print(curr_node.val)
    curr_node = curr_node.next

输出结果如下:

1
2
3
4
5
总结

使用递归创建循环列表可以更加直观地理解链表链接过程,并且代码实现也更加简洁。但需要注意递归的终止条件和节点链接的顺序,以确保循环链表的正确创建。