双向链表-Python版本
1.双链表
#!/usr/bin/env python # encoding: utf-8 # Author: GuoCheng # 2022/7/18 18:47 class Node(object): def __init__(self, elem): """双向链表节点""" self.elem = elem self.next = None self.prev = None class Linklist(object): def __init__(self, node=None): self.__head = node def is_empty(self): """判断链表是否为空""" return self.__head is None def travel(self): """遍历链表""" if self.is_empty(): return cur = self.__head while cur is not None: print(cur.elem, end=' ') cur = cur.next print('end...') def length(self): """链表长度""" cur = self.__head count = 0 while cur is not None: count += 1 cur = cur.next return count def add(self, elem): """链表头部添加元素""" node = Node(elem) node.next = self.__head if self.__head is not None: self.__head.prev = node self.__head = node def append(self, elem): """链表尾部添加元素""" node = Node(elem) if self.is_empty(): self.__head = node else: cur = self.__head while cur.next is not None: cur = cur.next cur.next = node node.prev = cur def insert(self, pos, elem): """指定位置添加元素""" if pos <= 0: self.add(elem) elif pos > self.length() - 1: self.append(elem) else: node = Node(elem) cur = self.__head count = 0 while count < pos - 1: cur = cur.next count += 1 node.next = cur.next cur.next = node node.prev = cur node.next.prev = node def remove(self, elem): """删除节点""" if self.is_empty(): return cur = self.__head while cur is not None: if cur.elem == elem: if cur == self.__head: self.__head = cur.next if cur.next is not None: cur.next.prev = cur.prev if cur.prev is not None: cur.prev.next = cur.next return cur = cur.next def search(self, elem): """查找节点""" if self.is_empty(): return cur = self.__head while cur is not None: if cur.elem == elem: return True cur = cur.next return False def pop(self): """删除尾节点""" if self.is_empty(): return cur = self.__head while cur.next is not None: cur = cur.next cur.prev.next = None return cur.elem def popleft(self): """删除头节点""" if self.is_empty(): return cur = self.__head self.__head = cur.next cur.next.prev = None return cur.elem def index(self, elem): """查找节点位置""" if self.is_empty(): return cur = self.__head count = 0 while cur is not None: if cur.elem == elem: return count cur = cur.next count += 1 return -1 def count(self, elem): """查找节点个数""" if self.is_empty(): return cur = self.__head count = 0 while cur is not None: if cur.elem == elem: count += 1 cur = cur.next return count def reverse(self): """反转链表""" if self.is_empty(): return cur = self.__head while cur is not None: temp = cur.prev cur.prev = cur.next cur.next = temp cur = cur.prev self.__head = cur.prev def sort(self): """排序""" if self.is_empty(): return cur = self.__head while cur is not None: cur_next = cur.next while cur_next is not None: if cur.elem > cur_next.elem: temp = cur.elem cur.elem = cur_next.elem cur_next.elem = temp cur_next = cur_next.next cur = cur.next def __str__(self): if self.is_empty(): return '' cur = self.__head res = '' while cur is not None: res += str(cur.elem) + ' ' cur = cur.next return res if __name__ == '__main__': node = Node(elem=2) ls = Linklist(node) ls.add(1) ls.travel()
梦想随心,天地随行
标签:
算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律