python创建一个双向链表并对链表进行添加、删除、遍历等操作
时间: 2023-09-04 07:04:05 浏览: 93
### 回答1:
创建一个双向链表需要定义一个节点类,它至少需要包含数据和前后指针。代码示例如下:
```python
class Node:
def __init__(self, data):
self.data = data
self.prev = None
self.next = None
```
接下来可以定义一个双向链表类,它至少需要包含头尾指针以及链表长度。代码示例如下:
```python
class DoublyLinkedList:
def __init__(self):
self.head = None
self.tail = None
self.length = 0
```
然后可以实现双向链表的添加、删除和遍历操作。代码示例如下:
```python
class DoublyLinkedList:
...
def append(self, data):
new_node = Node(data)
if self.length == 0:
self.head = new_node
self.tail = new_node
else:
new_node.prev = self.tail
self.tail.next = new_node
self.tail = new_node
self.length += 1
def prepend(self, data):
new_node = Node(data)
if self.length == 0:
self.head = new_node
self.tail = new_node
else:
new_node.next = self.head
self.head.prev = new_node
self.head = new_node
self.length += 1
def insert(self, index, data):
if index < 0 or index >= self.length:
raise Exception("Index out of range")
if index == 0:
self.prepend(data)
elif index == self.length - 1:
self.append(data)
else:
new_node = Node(data)
current_node = self.head
for i in range(index):
current_node = current_node.next
new_node.prev = current_node.prev
new_node.next = current_node
current_node.prev.next = new_node
current_node.prev = new_node
self.length += 1
def remove(self, data):
current_node = self.head
while current_node:
if current_node.data == data:
if current_node == self.head and current_node == self.tail:
self.head = None
self.tail = None
elif current_node == self.head:
self.head = current_node.next
self.head.prev = None
elif current_node == self.tail:
self.tail = current_node.prev
self.tail.next = None
else:
current_node.prev.next = current_node.next
current_node.next.prev = current_node.prev
self.length -= 1
return
current_node = current_node.next
def traverse(self):
current_node = self.head
while current_node:
print(current_node.data)
current_node = current_node.next
```
这里的 `append` 方法是在链表末尾添加节点, `prepend` 方法是在链表头部添加节点, `insert` 方法是在指定位置插入节点, `remove` 方法是删除指定节点, `traverse` 方法是遍历整个链表并打印每个节点的值。
### 回答2:
双向链表是一种可以在两个方向上进行遍历操作的链表,它由多个节点组成,每个节点包含一个值和两个指针,分别指向前一个节点和后一个节点。
首先,我们需要创建一个双向链表的类,并定义节点类:
```python
class Node:
def __init__(self, value):
self.value = value
self.prev = None
self.next = None
class DoublyLinkedList:
def __init__(self):
self.head = None
# 添加节点
def add_node(self, value):
new_node = Node(value)
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 remove_node(self, value):
current = self.head
while current:
if current.value == value:
if current.next:
current.next.prev = current.prev
if current.prev:
current.prev.next = current.next
if current == self.head:
self.head = current.next
return
current = current.next
# 遍历链表
def traverse(self):
current = self.head
while current:
print(current.value)
current = current.next
```
接下来,我们可以使用这个双向链表类进行操作:
```python
# 创建双向链表对象
dllist = DoublyLinkedList()
# 添加节点
dllist.add_node(1)
dllist.add_node(2)
dllist.add_node(3)
# 遍历链表
dllist.traverse() # 输出: 1 2 3
# 删除节点
dllist.remove_node(2)
# 再次遍历链表
dllist.traverse() # 输出: 1 3
```
以上是一个使用Python创建双向链表并对链表进行添加、删除、遍历等操作的示例。通过定义节点类和链表类,并使用相应的方法,我们可以在双向链表中执行各种操作。
### 回答3:
双向链表是一种常见的数据结构,它允许我们在链表中的任意位置进行添加和删除操作。在Python中,我们可以使用类来实现双向链表。
首先,创建一个双向链表的节点类,包含一个数据的属性和两个指针:一个指向前一个节点的指针和一个指向后一个节点的指针。
```python
class Node:
def __init__(self, data):
self.data = data
self.prev = None
self.next = None
```
接下来,创建一个双向链表类,包含头节点和尾节点。我们可以在双向链表中添加和删除节点,以及遍历链表。
```python
class DoublyLinkedList:
def __init__(self):
self.head = None
self.tail = None
def addNode(self, data):
newNode = Node(data)
if self.head is None:
self.head = self.tail = newNode
else:
newNode.prev = self.tail
self.tail.next = newNode
self.tail = newNode
def deleteNode(self, data):
currentNode = self.head
while currentNode:
if currentNode.data == data:
if currentNode.prev:
currentNode.prev.next = currentNode.next
else:
self.head = currentNode.next
if currentNode.next:
currentNode.next.prev = currentNode.prev
else:
self.tail = currentNode.prev
return
currentNode = currentNode.next
def traverse(self):
currentNode = self.head
while currentNode:
print(currentNode.data)
currentNode = currentNode.next
```
现在,我们可以进行测试:
```python
doublyLinkedList = DoublyLinkedList()
doublyLinkedList.addNode(1)
doublyLinkedList.addNode(2)
doublyLinkedList.addNode(3)
print("链表遍历:")
doublyLinkedList.traverse()
doublyLinkedList.deleteNode(2)
print("删除节点后的链表遍历:")
doublyLinkedList.traverse()
```
这样,我们就创建了一个双向链表,并进行了添加、删除、遍历等操作。