用python代码写一个链表
时间: 2023-12-17 10:54:01 浏览: 25
以下是一个简单的链表实现,包括节点类和链表类:
```python
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
# 在链表末尾添加节点
def append(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
else:
current = self.head
while current.next:
current = current.next
current.next = new_node
# 在指定位置插入节点
def insert(self, data, position):
new_node = Node(data)
if position == 0:
new_node.next = self.head
self.head = new_node
else:
current = self.head
for i in range(position - 1):
if current.next:
current = current.next
else:
raise IndexError("Index out of range")
new_node.next = current.next
current.next = new_node
# 删除指定位置的节点
def delete(self, position):
if not self.head:
raise IndexError("Index out of range")
if position == 0:
self.head = self.head.next
else:
current = self.head
for i in range(position - 1):
if current.next:
current = current.next
else:
raise IndexError("Index out of range")
if not current.next:
raise IndexError("Index out of range")
current.next = current.next.next
# 获取链表长度
def __len__(self):
count = 0
current = self.head
while current:
count += 1
current = current.next
return count
# 获取链表中指定位置的节点的数据
def __getitem__(self, position):
if position < 0 or position >= len(self):
raise IndexError("Index out of range")
current = self.head
for i in range(position):
current = current.next
return current.data
# 设置链表中指定位置的节点的数据
def __setitem__(self, position, data):
if position < 0 or position >= len(self):
raise IndexError("Index out of range")
current = self.head
for i in range(position):
current = current.next
current.data = data
# 遍历链表,返回一个生成器
def __iter__(self):
current = self.head
while current:
yield current.data
current = current.next
# 将链表转换为列表
def to_list(self):
return list(self)
```
使用示例:
```python
# 创建一个空链表
my_list = LinkedList()
# 在链表末尾添加节点
my_list.append(1)
my_list.append(2)
my_list.append(3)
# 在指定位置插入节点
my_list.insert(4, 1)
# 删除指定位置的节点
my_list.delete(2)
# 获取链表长度
print(len(my_list)) # 3
# 获取链表中指定位置的节点的数据
print(my_list[0]) # 1
print(my_list[1]) # 4
print(my_list[2]) # 2
# 设置链表中指定位置的节点的数据
my_list[2] = 3
print(my_list.to_list()) # [1, 4, 3]
# 遍历链表
for data in my_list:
print(data)
# 输出:
# 1
# 4
# 3
```