假设在双链表中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)