python双向链表 定位删除
时间: 2023-06-02 17:02:28 浏览: 135
双向链表是一种链式数据结构,每个节点有两个指针,一个指向前一个节点,一个指向后一个节点。定位删除指的是在双向链表中找到指定节点,并从链表中删除该节点。
以下是一个简单的Python实现:
```python
class Node:
def __init__(self, data):
self.data = data
self.prev = None
self.next = None
class DoublyLinkedList:
def __init__(self):
self.head = None
self.tail = None
def add_node(self, data):
new_node = Node(data)
if self.tail is None:
self.head = new_node
self.tail = new_node
else:
new_node.prev = self.tail
self.tail.next = new_node
self.tail = new_node
def delete_node(self, data):
current_node = self.head
while current_node is not None:
if current_node.data == data:
if current_node.prev is None:
self.head = current_node.next
else:
current_node.prev.next = current_node.next
if current_node.next is None:
self.tail = current_node.prev
else:
current_node.next.prev = current_node.prev
return
current_node = current_node.next
def print_list(self):
current_node = self.head
while current_node is not None:
print(current_node.data)
current_node = current_node.next
```
在上面的代码中,我们首先定义了一个Node类来表示双向链表中的每个节点。每个节点都包含一个数据项和两个指针,分别指向前一个节点和后一个节点。然后,我们定义了一个DoublyLinkedList类来表示整个双向链表。该类包含一个指向链表头部和尾部的指针。
在add_node方法中,我们创建一个新的节点,并将其添加到链表的尾部。如果链表为空,则将新节点设置为头部和尾部。否则,我们将新节点的prev指针设置为当前尾部节点,并将当前尾部节点的next指针设置为新节点。最后,我们将新节点设置为新的尾部节点。
在delete_node方法中,我们首先遍历整个链表,直到找到包含指定数据项的节点。一旦找到了节点,我们就需要更新其前一个节点和后一个节点的指针,以便将其从链表中删除。如果该节点是链表的头部,则我们需要将链表头部指针设置为其下一个节点。如果该节点是链表的尾部,则我们需要将链表尾部指针设置为其前一个节点。最后,我们将该节点从链表中删除。
在print_list方法中,我们打印整个链表中的所有数据项。
以下是一个示例,演示如何使用该类:
```python
# create a new doubly linked list
dlist = DoublyLinkedList()
# add some nodes to the list
dlist.add_node(1)
dlist.add_node(2)
dlist.add_node(3)
dlist.add_node(4)
# print the list
dlist.print_list()
# delete a node from the list
dlist.delete_node(3)
# print the list again
dlist.print_list()
```
输出结果:
```
1
2
3
4
1
2
4
```
阅读全文