Python实现双向链表

 时间:2026-02-12 10:20:45

1、打开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的赋值。

Python实现双向链表

2、F5运行程序,打印出添加进双向链表的内容:

9

8

Python实现双向链表

3、继续编写代码,增加双向链表的append方法,代码如下:

  def append(self,item):

    if self.length()==0:

      self.add(item)

    else:

      node = Node(item)

      cur = self.__head

      while cur.next is not None:

        cur = cur.next

      cur.next = node

      node.pre = cur

main函数为:

if __name__ == '__main__':

  sll = DoubleLinkedList()

  sll.add(8)

  sll.add(9)

  sll.append(0)

  sll.walk()

Python实现双向链表

4、F5运行程序,0被成功添加到双向列表

9

8

0

Python实现双向链表

5、继续编写insert方法:

  def insert(self,i,item):

    if i<=0:

      self.add(item)

      

    elif i>=self.length():

      self.append(item)

    else:

      node = Node(item)

      cur = self.__head

      index = 0

      

      while index < i-1:

        index = index +1    

        cur = cur.next

      node.next = cur.next   #让插入node的next指向当前node的next

      node.pre = cur           #让插入node的pre指向当前node

      cur.next = node          #让当前node的next指向插入的node

      cur.next.pre=node     # 让当前node的next节点的pre指向node

main方法:

if __name__ == '__main__':

  sll = DoubleLinkedList()

  sll.add(8)

  sll.add(9)

  sll.insert(1,1)

  sll.append(0)

  sll.walk()

Python实现双向链表

6、F5运行程序,在位置1成功插入1:

9

1

8

0

Python实现双向链表

7、继续编写delete函数,代码如下:

  def delete(self,item):

    cur = self.__head

   

    while cur is not None:

      if cur.item == item:

        if cur.pre is not None:  #排除删除的时第一个node

          cur.pre.next = cur.next

        else:

          self.__head = cur.next

        if cur.next is not None: #排除删除的是最后一个node

          cur.next.pre = cur.pre

      cur = cur.next

main方法

if __name__ == '__main__':

  sll = DoubleLinkedList()

  sll.add(8)

  sll.add(9)

  sll.insert(1,1)

  sll.append(0)

  sll.delete(0)

  sll.walk()

Python实现双向链表

8、F5运行程序,最后一个位置0元素被成功删除了

9

1

8

Python实现双向链表

  • 华为云会议怎么开启会议美颜功能
  • cad字体大小在哪里修改
  • Auto CAD怎么使用作轴测图
  • CAD如何给封闭的的图形补充图案
  • win10 excel怎么设置禁止显示快速分析选项?
  • 热门搜索
    百分比怎么算 怎么预防艾滋病 怎么分盘 一大写怎么写 吉他怎么弹 生菜怎么做好吃 虚拟内存怎么设置 迷你世界怎么召唤石巨人 固特异轮胎怎么样 回力轮胎怎么样