双向链表中插入结点并输出
时间: 2023-05-26 14:07:44 浏览: 114
以下是 Python 代码实现双向链表中的插入操作,并输出整个链表:
```python
class Node:
def __init__(self, data=None):
self.data = data
self.prev = None
self.next = None
class DoublyLinkedList:
def __init__(self):
self.head = None
def insert_at_beginning(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
else:
new_node.next = self.head
self.head.prev = new_node
self.head = new_node
def insert_at_end(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 insert_after_node(self, node, data):
new_node = Node(data)
if node.next is None:
node.next = new_node
new_node.prev = node
else:
node.next.prev = new_node
new_node.next = node.next
node.next = new_node
new_node.prev = node
def insert_before_node(self, node, data):
new_node = Node(data)
if node.prev is None:
self.head = new_node
new_node.next = node
node.prev = new_node
else:
node.prev.next = new_node
new_node.prev = node.prev
new_node.next = node
node.prev = new_node
def print_list(self):
current = self.head
while current:
print(current.data, end=" ")
current = current.next
print()
# 测试
dllist = DoublyLinkedList()
dllist.insert_at_beginning(5)
dllist.insert_at_beginning(4)
dllist.insert_at_end(6)
dllist.insert_after_node(dllist.head, 7)
dllist.insert_before_node(dllist.head.next.next, 8)
dllist.print_list() # 4 5 8 7 6
```
这里定义了一个 `Node` 类作为链表结点原型,包含数据域 `data`、前驱指针 `prev` 和后继指针 `next`。
然后定义了 `DoublyLinkedList` 类,它有一个头指针 `head` 用于指向双向链表的第一个结点。该类中包含了插入操作的四个方法:
- `insert_at_beginning`:在链表开头插入结点。
- `insert_at_end`:在链表末尾插入结点。
- `insert_after_node`:在指定结点后插入结点。
- `insert_before_node`:在指定结点前插入结点。
这里选择 Python 语言实现,因为 Python 的语法简约,显得清晰明了。实际上,双向链表的插入操作各种语言实现差异并不大。
阅读全文