用python实现了简单的链表数据结构,并进行插入删除等操作
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
class Node(object): # node 类
def __init__(self, val, p=None):
self.data = val
self.next = p
def __repr__(self): # 打印 data
return str(self.data)
class Linklist(object): # 链表类
def __init__(self):
self.head = None
self.length = 0
def isEmpty(self): # 判断链表是否为空
return (self.length == 0)
def insert(self, index, dataOrNode): # 插入
if index < 0 or index > self.length:
print('error: out of index')
return
item = None
if isinstance(dataOrNode, Node): # 判断数据类型
item = dataOrNode
else:
item = Node(dataOrNode)
if index == 0: # 头部插入
item.next = self.head
self.head = item
self.length += 1
return
j = 0 # 中间插入
node = self.head
pre = self.head
while node.next and j < index:
pre = node
node = node.next
j += 1
if j == index:
item.next = node
pre.next = item
self.length += 1
def delete(self, index): # 删除
if self.isEmpty():
print('this linklist is empty')
return
if index < 0 or index > self.length:
print('error: out of index')
return
if index == 0: # 头部删除
self.head = self.head.next
self.length -= 1
return
j = 0 # 中部删除
node = self.head
pre = self.head
while node and j < index:
pre = node
node = node.next
j += 1
if j == index:
pre.next = node.next
self.length -= 1
def __repr__(self): # 打印链表
if self.isEmpty():
return 'the linklist is empty'
node = self.head
nlist = ''
while node:
nlist += str(node.data) + ' '
node = node.next
return nlist
if __name__ == '__main__':
linklist_1 = Linklist()
for i in range(10):
linklist_1.insert(0, i)
print(linklist_1)
linklist_1.delete(5)
print(linklist_1)
参考:
https://www.cnblogs.com/king-ding/p/pythonchaintable.html
https://blog.csdn.net/tales_/article/details/48145749