python官方题解--删除链表中重复的节点

删除链表中重复的结点

http://www.nowcoder.com/questionTerminal/fc533c45b73a41b0b44ccba763f866ef

参考自剑指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
全部评论
感谢
点赞 回复 分享
发布于 2020-04-22 13:16

相关推荐

买蜜雪也用卷:我觉得应该没有哪个人敢说自己熟练使用git,代码分支一复杂还是得慢慢寻思一下的,不过基本的拉代码提交代码还有分支什么的是应该会
点赞 评论 收藏
分享
昨天 03:40
已编辑
电子科技大学 Java
在秋招的小白菜很想养修勾:一眼 苍穹外卖+谷粒商城,项目换一换吧,可以找一些付费知识星球博主带带,避免烂大街。多投投大厂,背背八股,你这学历乱杀了,等实习经验到位,到时候大厂闭眼选
投递美团等公司7个岗位
点赞 评论 收藏
分享
评论
9
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务