参考自剑指offer官方题解:
具体的解释直接看代码就可看懂啦!!!
class Solution:
def deleteDuplication(self, pHead):
# write code here
# 判断链表是否为空
if not pHead:
return None
pPreNode = None #存储要删除节点的前一个节点
pNode = pHead #定义起始节点
#开始循环
while pNode:
pNext = pNode.next
needDelete = False
#判断相邻的两个节点值是否相等
if pNext and pNext.val == pNode.val:
needDelete = True
#如果不相等就后移一个, pPreNode指向最前面的节点
if not needDelete:
pPreNode = pNode
pNode = pNode.next
#如果相等就开始删除
else:
val = pNode.val #初始化要删除节点的值
pDeleteNode = pNode #定义要删除的节点
#判断当前要删除的节点是否和val相等以及是否为空
while pDeleteNode and pDeleteNode.val == val:
pNext = pDeleteNode.next
del pDeleteNode #删除节点
pDeleteNode = pNext #节点后移
#如果要删除的节点包含初始的头结点,那就需要将头结点移到当前节点的位置
if not pPreNode:
pHead = pNext
#如果要删除的节点不包含头结点,则将节点进行连接
else:
pPreNode.next = pNext
#开始从最新的节点开始遍历
pNode = pNext
#返回头结点
return pHead
京公网安备 11010502036488号