双链表结构

假设在双链表中p节点之后插入一个s节点,其指针变化过程如下,共修改了四个指针域

双链表操作

建表

class Node:
    def __init__(self, dataval):
        self.dataval = dataval
        self.nextval = None  # 下一个指针
        self.prev = None  # 前一个指针

class doub_list:  # 定义一个双向链表
    def __init__(self):
        self.headval=None #定义头部

添加

def add_(self,newd):#添加数据元素
    NewNode=Node( newd)
    NewNode.nextval=self.headval
    if self.headval is not None:
        self.headval.prev=NewNode
    self.headval=NewNode

中间插入

#给定一个节点插入到链表中  涉及四个节点
def insert(self,prev_node,newd):
    NewNode=Node(newd)
    if prev_node is None: #if will make your code more strong
        return
    NewNode.nextval=prev_node.nextval
    prev_node.nextval=NewNode
    NewNode.prev=prev_node
    #prev_node.nextval=NewNode  #this also can run .if will make your code more strong
    if NewNode.nextval is not None:
        NewNode.nextval.prev=NewNode

附加

双链表的附加,只能追加到最后位置
def append_(self,newd):
    NewNode=Node(newd)
    NewNode.nextval=None#只能追加到最后  NewNode的最后一个节点为空
    #如果头部为空,新节点的前驱为空 此时头部就是newnode
    #否则循环遍历找到最后一个节点
    if self.headval is None:
        NewNode.prev=None
    last=self.headval  #last为最后一个节点  链接新链表
    while last.nextval is not None:
        last=last.nextval
    last.nextval=NewNode
    NewNode.prev=last

调用

list_=doub_list()#实例化

list_.add_(1)
list_.add_(2)
list_.append_(0)
list_.add_(3) #追加只能追加到尾部
list_.insert(list_.headval,4)
list_.append_(9)
list_.print_Doub_list(list_.headval)

双链表结构_第1张图片

你可能感兴趣的:(数据结构,python数据结构)