参考自剑指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