判断双向循环链表是否对称对称:从前往后和从后往前的序列相等就是对称
双向循环链表可以让两个指针以两个顺序移动,所以只要每个指针检查一半即可。
def Symm(L):
flag=True
p=L.dhead.next#p指向首结点
q=L.dhead.prior#q指向尾结点
while flag:
if p.data!=q.data:
flag=False
else:
if p==q or p==q.prior:break#解决奇偶长度的问题,这里也是循环退出的条件
#奇数长度,退出条件为p==q,(再移动一次两个指针就相碰);偶数长度,退出条件为p==q.prior,(再移动一次两个指针就刚好错开)
q=q.prior
p=p.next
return flag
针对 if p==q or p==q.prior:break 的循环退出条件,进行以下图解: