Python链表之双向链表
2021/8/9 1:08:32
本文主要是介绍Python链表之双向链表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
class Node(object): """节点""" def __init__(self, item): self.item = item self.next = None self.prev = None class DoubleLinkList(object): """双链表""" def __init__(self, node=None): self._head = node def is_empty(self): # 和单链表一样 """判断链表是否为空""" return self._head == None def length(self): # 和单链表一样 """链表长度""" # cur游标,用来移动遍历节点 cur = self._head # count记录数量 count = 0 while cur is not None: count += 1 cur = cur.next return count def travel(self): # 和单链表一样 """遍历链表""" # cur游标,用来移动遍历节点 cur = self._head while cur is not None: print(cur.item, end=" ") cur = cur.next print("") def add(self, item): """头部添加元素,头插法""" node = Node(item) if self.is_empty(): self._head = node else: node.next = self._head self._head.prev = node self._head = node def append(self, item): """尾部添加元素,尾插法""" node = Node(item) if self.is_empty(): self._head = node else: # cur游标,用来移动遍历节点 cur = self._head while cur.next is not None: cur = cur.next cur.next = node node.prev = cur def insert(self, pos, item): """指定位置添加元素 :param pos:从0开始 """ if pos <= 0: self.add(item) elif pos > self.length() - 1: self.append(item) else: count = 0 cur = self._head while count < pos: count += 1 cur = cur.next # 退出循环的时候,cur指向pos位置 node = Node(item) node.next = cur node.prev = cur.prev cur.prev.next = node cur.prev = node def remove(self, item): """删除节点""" cur = self._head while cur is not None: if cur.item == item: # 先判断此节点是否是头节点 if cur == self._head: self._head = cur.next if cur.next: # 判断链表是否只有一个节点 cur.next.prev = None else: cur.prev.next = cur.next if cur.next: cur.next.prev = cur.prev break else: cur = cur.next def search(self, item): """链表查找节点是否存在,并返回True或者False""" cur = self._head while cur is not None: if cur.item == item: return True else: cur = cur.next return False if __name__ == "__main__": ll = DoubleLinkList() print(ll.is_empty()) print(ll.length()) ll.add(1) print(ll.is_empty()) print(ll.length()) ll.append(2) ll.append(3) ll.append(4) ll.append(5) ll.append(6) ll.travel() ll.add(8) ll.travel() ll.insert(-1, 66) ll.travel() ll.remove(66) ll.travel() ll.remove(6) ll.travel()
这篇关于Python链表之双向链表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器