python实现双向链表
2016-10-26 22:43
411 查看
相对于单向链表,双向链表多了一个指向前面一个节点的指针,如下图所示:
图片来源于网络
利用python实现也非常的容易:
图片来源于网络
利用python实现也非常的容易:
class Node(object): def __init__(self, value): self.value = value self.next = None self.prev = None class LinkList(object): def __init__(self): self.head = Node('head') def add(self, value): p = self.head new = Node(value) while p.next: p = p.next p.next = new new.prev = p def remove(self, value): p = self.head while p.next: if p.value == value: temp = p.prev xyz = p.next temp.next = xyz xyz.prev = temp break else: p = p.next def find(self, value): #根据指定的值找出位置 p = self.head i = 0 while p.next: if p.value == value: return i else: p = p.next i += 1 raise AttributeError(u"can\'t find this element") def index(self, index): #根据指定的位置找出相应的值 i = 0 p = self.head while p.next: if i == index: return p.value else: i += 1 p = p.next raise IndexError(u'index out of range') def findprev(self, value): """根据指定节点的值找出前面的一个节点的值""" p = self.head while 1: if p.value == value: return p.prev.value break else: p = p.next if not p.next: return p.prev.value break raise AttributeError(u"can\'t find this element") def findnext(self, value): """根据指定节点的值找出后面的一个节点的值""" p = self.head while 1: if p.value == value: return p.next.value else: p = p.next if not p.next: return None raise AttributeError(u"can\'t find this element") def insert(self, index, value): """index必须大于等于1 """ i = 0 p = self.head new = Node(value) while p.next: if i == index: temp = p.prev temp.next = new new.prev = temp new.next = p p.prev = new break else: p = p.next i += 1 #上面循环自然结束,就直接插入到元素的末尾 else: p.next = new new.prev = p def length(self): p = self.head i = 0 while p.next: p = p.next i += 1 return i def output(self): p = self.head while 1: print p.value p = p.next if not p.next: print p.value break def reverse(self): """反转链表""" length = self.length() i = 0 p = self.head.next while p.next: p = p.next else: last = p first = self.head.next while i < length: first.value, last.value = last.value, first.value first = first.next last = last.prev i += 1 length -= 1
相关文章推荐
- python双向链表实现实例代码
- Python二叉搜索树与双向链表转换实现方法
- Python实现双向链表的基本操作
- 【转】Python实现双向链表(图解)
- python——python 数据结构之双向链表的实现
- Python二叉搜索树与双向链表转换实现方法
- python 数据结构之双向链表的实现
- Python 实现双向链表(图解)
- 实现双向链表
- 双向链表的c#实现
- 利用模板类编写一个程序,实现双向链表的插入、删除、查找、显示的功能。
- 实现双向链表删除一个节点P,在节点P后插入一个节点
- C#实现双向链表
- JAVA 语言中链表和双向链表的实现
- 双向循环链表删除算法的C++程序实现
- Java语言中链表和双向链表的实现
- Java语言中链表和双向链表的实现
- C#实现双向链表
- 链表的C语言实现之循环链表及双向链表
- Python中数组 链表 元组 字典实现类Sql多字段排序和动态函数实现