Python 实现双向链表（图解）

双向链表基本方法实现（Python）

1. 初始化链表

"""节点类"""
class Node(object):
def __init__(self, data=None):
self.data = data
self.pre = None
self.next = None

"""初始化双向链表"""

def __init__(self):
"""
设置头尾，操作比较容易
头－－（next）－－》尾
尾－－（pre）－－》头
:return:
"""
tail = Node()
self.tail = tail
self.tail.pre = self.head

2. 获取链表长度

"""获取链表长度"""

def __len__(self):
length = 0
while node.next != self.tail:
length += 1
node = node.next
return length

3. 追加节点

"""追加节点"""

def append(self, data):
"""
:param data:
:return:
"""
node = Node(data)
pre = self.tail.pre
pre.next = node
node.pre = pre
self.tail.pre = node
node.next = self.tail
return node

4. 获取节点

 """获取节点"""
def get(self, index):
"""
获取第index个值，若index>0正向获取else 反向获取
:param index:
:return:
"""
length = len(self)
index = index if index >= 0 else length + index
if index >= length or index < 0: return None
while index:
node = node.next
index -= 1
return node

5. 设置节点

"""设置节点"""

def set(self, index, data):
node = self.get(index)
if node:
node.data = data
return node

6. 插入节点

"""插入节点"""

def insert(self, index, data):
"""
因为加了头尾节点所以获取节点node就一定存在node.next 和 node.pre
:param index:
:param data:
:return:
"""
length = len(self)
if abs(index + 1) > length:
return False
index = index if index >= 0 else index + 1 + length

next_node = self.get(index)
if next_node:
node = Node(data)
pre_node = next_node.pre
pre_node.next = node
node.pre = pre_node
node.next = next_node
next_node.pre = node
return node


7. 删除节点

"""删除节点"""

def delete(self, index):
node = self.get(index)
if node:
node.pre.next = node.next
node.next.pre = node.pre
return True

return False

8. 反转链表

1.node.next –> node.pre；node.pre –> node.next（递归）

"""反转链表"""
def __reversed__(self):
"""
1.node.next --> node.pre
node.pre --> node.next
tail.pre --> None
:return:
"""
tail = self.tail

def reverse(pre_node, node):
if node:
next_node = node.next
node.next = pre_node
pre_node.pre = node
pre_node.next = None
if node is self.tail:
node.pre = None
return reverse(node, next_node)
else:

return reverse(self.head, self.head.next)

9. 清空链表

"""清空链表"""
def clear(self):
self.tail.pre = self.head

2015 年 11月

• 本文已收录于以下专栏：

[从头学数学] 第262节 Python实现数据结构：双向链表

• mwsister
• 2016年09月17日 12:06
• 741

Python 实现双链表，栈，队列

1.双链表 class Node(object): def __init__(self, value=None): self._prev = None self...
• python_tty
• 2017年02月24日 17:07
• 633

Python 实现单向链表

Python 实现单向链表 什么是 链表 链表顾名思义就是～链 链表是一种动态数据结构，他的特点是用一组任意的存储单元存放数据元素。链表中每一个元素成为“结点”，每一个结点都是由数据域和...
• qq490691606
• 2015年11月20日 13:50
• 4359

Python链表的实现

• lvhuiyang
• 2016年12月11日 11:30
• 3414

Python 中的 list 并不是我们传统（计算机科学）意义上的列表，这也是其 append 操作会比 insert 操作效率高的原因。传统列表——通常也叫作链表（linked list）——通常是...
• lanchunhui
• 2016年03月21日 08:00
• 8134

python的链表定义以及实现

• DinnerHowe
• 2017年02月27日 18:57
• 1455

一个python实现的有魔法方法（magic method）的单链表（静态链表）

• psmlbj
• 2017年03月10日 12:45
• 303

Python 实现一个全面的单链表

• Marksinoberg
• 2017年04月05日 19:28
• 7946

单链表-Python操作

• qq_14959801
• 2016年11月04日 10:31
• 3522

用python实现链表操作

• w2211384272
• 2015年07月30日 16:58
• 3604

举报原因： 您举报文章：Python 实现双向链表（图解） 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)