分别展示双向列表和循环列表是怎么实现的
时间: 2024-02-25 16:58:32 浏览: 18
双向链表是一种数据结构,每个节点包含两个指针,一个指向前一个节点,一个指向后一个节点。常见的双向链表操作包括插入、删除和遍历。
以下是一个简单的双向链表的实现:
```python
class Node:
def __init__(self, data):
self.data = data
self.prev = None
self.next = None
class DoublyLinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
else:
current = self.head
while current.next:
current = current.next
current.next = new_node
new_node.prev = current
def delete(self, data):
current = self.head
while current:
if current.data == data:
if current.prev:
current.prev.next = current.next
if current.next:
current.next.prev = current.prev
else:
self.head = current.next
if current.next:
current.next.prev = None
return
current = current.next
def print_list(self):
current = self.head
while current:
print(current.data)
current = current.next
```
循环链表是一种特殊类型的链表,它的最后一个节点指向第一个节点,形成一个循环。常见的循环链表操作包括插入、删除和遍历。
以下是一个简单的循环链表的实现:
```python
class Node:
def __init__(self, data):
self.data = data
self.next = None
class CircularLinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if self.head is None:
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 delete(self, data):
if self.head is None:
return
elif self.head.data == data:
current = self.head
while current.next != self.head:
current = current.next
current.next = self.head.next
self.head = self.head.next
else:
current = self.head
prev = None
while current.next != self.head:
prev = current
current = current.next
if current.data == data:
prev.next = current.next
return
def print_list(self):
current = self.head
while current:
print(current.data)
current = current.next
if current == self.head:
break
```