将双链表L的最后一个值为x的结点与其前驱结点交换,如果不存在值为x的结点或者该节点是首结点则不做出任何改变。
代码如下:
#将双链表L的最后一个值为x的结点与其前驱结点交换,如果不存在值为x的结点或者该节点是首结点则不做出任何改变
def Swap(L,x):#请见图解
p=L.dhead.next
q=None
while p!=None:
if p.data==x:#获取最后一个值为x的结点,有点类似求最大值,用q指针不断更新最后一个结点
q=p
p=p.next#p结点后移一位
if q==None or L.dhead.next==q:#如果没有值为x的,则q为None;如果是头结点则L.dhead.next==q
return
else:#找到最后一个结点则进行交换
#交换意味着删除这个结点,并把这个结点插入到前一个位置
#q始终是这个元素
pre=q.prior#通常标记总是标记要变化元素的前一个
#以下三行语句执行了删除操作
pre.next=q.next
if q.next!=None:#判断是否有下一个结点
q.next.prior=pre
#以下四行语句执行了插入操作
pre.prior.next=q
q.prior=pre.prior
pre.prior=q
q.next=pre
图解执行过程如下: