python 双向链表_Python实现双向链表

打开Python开发工具IDLE,新建‘DoubleLinkedList.py’文件,并写代码如下;

class Node:

def __init__(self,item):

self.item = item

self.next = None

self.pre = None

class DoubleLinkedList:

def __init__(self):

self.__head = None

def add(self,item):

node = Node(item)

if self.isEmpty():

self.__head = node

else:

node.next = self.__head

self.__head.pre = node

self.__head = node

def isEmpty(self):

return self.__head == None

def walk(self):

cur = self.__head

while cur is not None:

print (cur.item)

cur = cur.next

def length(self):

cur = self.__head

count = 0

while cur is not None:

count += 1

cur = cur.next

return count

if __name__ == '__main__':

sll = DoubleLinkedList()

sll.add(8)

sll.add(9)

sll.walk()

walk、length、isEmpty三个函数和单向链表一样的,不需要改动,add函数要注意pre的赋值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
双向循环链表是一种链式数据结构,每个节点除了存储数据外,还有两个指针,分别指向前驱节点和后继节点。与单向链表相比,双向链表可以支持双向遍历和删除操作。 下面是用 Python 实现双向循环链表的代码: ```python class Node: def __init__(self, data): self.data = data self.prev = None self.next = None class DoublyLinkedList: def __init__(self): self.head = None def is_empty(self): return self.head is None def add_first(self, data): new_node = Node(data) if self.is_empty(): self.head = new_node new_node.prev = new_node new_node.next = new_node else: new_node.next = self.head new_node.prev = self.head.prev self.head.prev.next = new_node self.head.prev = new_node self.head = new_node def add_last(self, data): new_node = Node(data) if self.is_empty(): self.head = new_node new_node.prev = new_node new_node.next = new_node else: new_node.prev = self.head.prev new_node.next = self.head self.head.prev.next = new_node self.head.prev = new_node def remove_first(self): if self.is_empty(): return None elif self.head.next is self.head: data = self.head.data self.head = None return data else: data = self.head.data self.head.next.prev = self.head.prev self.head.prev.next = self.head.next self.head = self.head.next return data def remove_last(self): if self.is_empty(): return None elif self.head.next is self.head: data = self.head.data self.head = None return data else: data = self.head.prev.data self.head.prev.prev.next = self.head self.head.prev = self.head.prev.prev return data def __str__(self): if self.is_empty(): return '[]' else: s = '[' node = self.head while node.next is not self.head: s += str(node.data) + ', ' node = node.next s += str(node.data) + ']' return s ``` 以上是基础的双向循环链表实现,你可以根据自己的需求,添加其他方法和属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值