"""author: zhao xian xin
不积跬步无以至千里"""
#设置 每一个链表的结点
classNode(object):"""链表节点类"""
def __init__(self, item):
self.element=item
self.next=None#设置 链表得 方法
classSingleLinkList(object):"""链表 公用 函数方法"""
"""初始化链表"""
def __init__(self):
self.header=None
self.length=0"""链表头部添加元素"""
deffirstAdd(self, node):if self.header ==None:
self.header=nodeelse:
node.next=self.header
self.header=node
self.length+= 1
"""链表尾部添加元素"""
deftailAdd(self, node):if self.header ==None:
self.header=nodeelse:
currentNode=self.headerwhile currentNode.next !=None:
currentNode=currentNode.next
currentNode.next=node
self.length+= 1
"""遍历链表"""
defrangeList(self):try:assert self.length != 0, "链表为空"
except:print("ok")
currentNode=self.headerfor i inrange(0, self.length):
eleNum=currentNode.element
currentNode=currentNode.nextprint(eleNum, end=" ")"""插入节点到对应得位置"""
definsertNode(self, index, node):if self.length <= index <=0:raiseValueError()else:"""需要考虑 for 循环 得 range"""
if index == 1:
self.firstAdd(node)elif index == 2:
node.next=self.header.next
self.header.next=node
self.length+= 1
else:
currentNode=self.headerfor i in range(1, index - 1):
currentNode=currentNode.next
node.next=currentNode.next
currentNode.next=node
self.length+= 1
"""结点之间排序 排序的方式 不需要交换节点之间的位置
只需要 交换节点之间值就可以了 用到了快速排序"""
defsortList(self):if self.header ==None:raiseValueError()else:"""快速排序 方式 实现"""
for i inrange(0, self.length):
currentNode=self.headerfor j in range(0, self.length - i -1):if currentNode.element >currentNode.next.element:
mid=currentNode.element
currentNode.element=currentNode.next.element
currentNode.next.element=mid
currentNode=currentNode.next"""通过索引得 位置 删除"""
defdeleteNode(self, index):if self.header ==None:raiseValueError()else:if index == 1:
self.header=self.header.nextelif index == 2:
self.header.next=self.header.next.nextelse:
currentNode=self.headerfor i in range(1, index - 1):
currentNode=currentNode.next
currentNode.next=currentNode.next.next
self.length-= 1
if __name__ == "__main__":
# 声明结点, 头部添加元素
node1= Node(1)
single_link_list= SingleLinkList() #实例化
single_link_list.firstAdd(node1)print(single_link_list.rangeList())
# 生命节点, 尾部添加元素
single_link_list.tailAdd(Node(2))print(single_link_list.rangeList())
# 声明结点, 在指定位置插入元素
single_link_list.insertNode(2, Node(3))print(single_link_list.rangeList())
#声明结点, 结点排序
single_link_list.tailAdd(Node(1))
single_link_list.sortList()print(single_link_list.rangeList())