📜  python中的循环链表(1)

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

Python中的循环链表

什么是循环链表?

在计算机科学中,循环链表是一种链表,其中最后一个节点的下一个节点是链表的第一个节点。循环链表可以通过将尾节点的指针引用到头部而建立起来。

为什么使用循环链表?

循环链表相比普通链表,可以避免在操作链表时出现空指针异常(null pointer exception)的情况。特别地,当需要把每个节点的下一个节点和前一个节点都访问到时,循环链表也是一个不错的选择。在循环链表中,每一个节点都可以引用到下一个节点和前一个节点,可以更方便地进行迭代。

Python中如何实现循环链表?

下面是一个简单易懂的 Python 代码实现循环链表的示例。其中,CircularLinkedList 类包含了 Node 类。

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

class CircularLinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            new_node.next = self.head
        else:
            current = self.head
            while current.next != self.head:
                current = current.next
            current.next = new_node
            new_node.next = self.head

    def remove(self, key):
        if self.head.data == key:
            current = self.head
            while current.next != self.head:
                current = current.next
            current.next = self.head.next
            self.head = self.head.next
        else:
            current = prev = self.head
            while current.next != self.head:
                prev = current
                current = current.next
                if current.data == key:
                    prev.next = current.next
                    current = current.next

    def __len__(self):
        current = self.head
        count = 0
        while current:
            count += 1
            current = current.next
            if current == self.head:
                break
        return count

    def __getitem__(self, index):
        if index >= len(self):
            return None
        current = self.head
        for i in range(index):
            current = current.next
        return current.data

    def __str__(self):
        s = ""
        current = self.head
        while current:
            s += str(current.data) + " "
            current = current.next
            if current == self.head:
                break
        return s

上述代码实现了循环链表的常用操作,包括添加节点、删除节点、获取链表长度和打印链表。下面是使用示例:

linked_list = CircularLinkedList()
linked_list.append(1)
linked_list.append(2)
linked_list.append(3)
print(linked_list)  # 1 2 3
linked_list.remove(2)
print(linked_list)  # 1 3
总结

循环链表是一种实现链表的数据结构,其特点在于最后一个节点的下一个节点指向第一个节点。Python语言中实现循环链表的代码也非常简单高效,是一个值得了解的数据结构。