Python 单链表实现
概念: 什么是单链表
链表是一种动态数据结构,他的特点是用一组任意的存储单元存放数据元素。链表中每一个元素成为“结点”,
每一个结点都是由数据域和指针域组成的。跟数组不同链表不用预先定义大小,而且硬件支持的话可以无限扩展。
代码:
""" author: zhao xian xin 不积跬步无以至千里 """ # 设置 每一个链表的结点 class Node(object): """ 链表节点类 """ def __init__(self, item): self.element = item self.next = None # 设置 链表得 方法 class SingleLinkList(object): """ 链表 公用 函数方法 """ """ 初始化链表 """ def __init__(self): self.header = None self.length = 0 """ 链表头部添加元素 """ def firstAdd(self, node): if self.header == None: self.header = node else: node.next = self.header self.header = node self.length += 1 """ 链表尾部添加元素 """ def tailAdd(self, node): if self.header == None: self.header = node else: currentNode = self.header while currentNode.next != None: currentNode = currentNode.next currentNode.next = node self.length += 1 """ 遍历链表 """ def rangeList(self): try: assert self.length != 0, "链表为空" except: print("ok") currentNode = self.header for i in range(0, self.length): eleNum = currentNode.element currentNode = currentNode.next print(eleNum, end=" ") """ 插入节点到对应得位置 """ def insertNode(self, index, node): if self.length <= index <= 0: raise ValueError() 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.header for i in range(1, index - 1): currentNode = currentNode.next node.next = currentNode.next currentNode.next = node self.length += 1 """ 结点之间排序 排序的方式 不需要交换节点之间的位置 只需要 交换节点之间值就可以了 用到了快速排序 """ def sortList(self): if self.header == None: raise ValueError() else: """ 快速排序 方式 实现 """ for i in range(0, self.length): currentNode = self.header for 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 """ 通过索引得 位置 删除 """ def deleteNode(self, index): if self.header == None: raise ValueError() else: if index == 1: self.header = self.header.next elif index == 2: self.header.next = self.header.next.next else: currentNode = self.header for 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())
额外小知识: assert 断言 当条件为假时会触发
邮箱: 1090055252@qq.com