Python实现双向链表

2025-10-24 02:41:52

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实现双向链表

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢