您现在的位置是:网站首页> 编程资料编程资料

Python实现双向链表基本操作_python_

2023-05-26 1324人已围观

简介 Python实现双向链表基本操作_python_

双向链表的基本操作的实现,供大家参考,具体内容如下

在之前的博客中介绍了三种链表,分别是单链表、单向循环链表以及双向链表。本篇博客将用Python来实现双向链表的如下操作。(用到的工具是Python 3)

is_empty() : 判断链表是否为空
length() : 返回链表的长度
travel() : 遍历
add(item) : 在头部添加一个节点
append(item) : 在尾部添加一个节点
insert(pos, item) : 在指定位置 pos 添加一个节点
remove(item) :  删除一个节点
search(item) :  查找节点是否存在

Python实现

class Node(object):     '''双向链表节点'''     def __init__(self,item):         self.item = item         self.next = None         self.prev = None class DoubleLink(object):     '''双向链表'''     def __init__(self):         self._head = None          def is_empty(self):         '''判断是否为空'''         return self._head == None          def length(self):         '''返回链表的长度'''         cur = self._head         count = 0         while cur!= None:             count += 1             cur = cur.next         return count          def travel(self):         '''遍历链表'''         cur = self._head         while cur != None:             print(cur.item)             cur = cur.next         print("")          def add(self, item):         '''头部插入元素'''         node = Node(item)         if self.is_empty():             # 如果是空链表,将_head指向None             self._head = node         else:             # 将node的next指向_head的头节点             node.next = self._head             # 将_head的头节点的prev指向node             self._head.prev = node             # 将_head 指向node             self._head = node          def append(self, item):         '''尾部插入元素'''         node = Node(item)         if self.is_empty():             self._head = node         else:             # 移动到链表尾部             cur = self._head             while cur.next != None:                 cur = cur.next             # 将尾结点cur的next指向node             cur.next = node             # 将node的prev指向cur             node.prev = cur          def search(self, item):         '''查找元素是否存在'''         cur = self._head         while cur != None:             if cur.item == item:                 return True             cur = cur.next         return False

指定位置插入节点

在该操作中,要注意链的指向的先后顺序。

def insert(self, pos, item):         '''在指定位置添加节点'''         if pos <= 0:             self.add(item)         elif pos > (self.length() - 1):             self.append(item)         else:             node = Node()             cur = self._head()             count = 0             # 移动到指定的前一个位置             while cur < pos - 1 :                 count += 1                 cur = cur.next             # 将node的prev指向cur             node.prev = cur             # 将node的next指向cur的下一个节点             node.next = cur.next             # 将cur的下一个节点的prev指向node             cur.next.prev = node             # 将cur.next指向node             cur.next = node

删除元素

def remove(self, item):         '''删除元素'''         if self.is_empty(): return          else:             cur = self._head             if cur.item == item:                 # 如果首节点的元素是要删除的元素                 if cur.next == None:                     # 如果链表中只有一个节点                     self._head = None                 else:                     cur.next.prev = None                     self._head = cur.next                 return             while cur != None:                 if cur.item == item:                     cur.prev.next = cur.next                     cur.next.prev = cur.prev                     break                 cur = cur.next

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

-六神源码网