56. 删除链表中重复的结点

删除链表中重复的结点

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

56. 删除链表中重复的结点

题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5


思路
在遍历的时候,记录上一个不重复的节点pPre,当前节点pThis,下个节点pNext。在遍历pThis的时候如果当前节点pThis的值跟后面的几个节点数值相同,需要找到下个不同的节点,删除重复节点,更新pPre和pThis;如果前节点pThis的值跟后面的节点数值不同,直接更新pPre和pThis。
如果pHead就是重复的,需要更新pHead。


代码实现

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def deleteDuplication(self, pHead):
        # write code here
        if pHead == None or pHead.next == None:
            return pHead
        pPre = None
        pThis = pHead
        pNext = None
        while(pThis):
            if(pThis.next and pThis.next.val == pThis.val):
                pNext = pThis.next
                while(pNext.next and pNext.next.val == pThis.val):
                    pNext = pNext.next
                if(pThis == pHead):
                    pHead = pNext.next
                else:
                    pPre.next = pNext.next
                pThis = pNext.next
            else:
                pPre = pThis
                pThis = pThis.next
        return pHead
全部评论

相关推荐

点赞 评论 收藏
分享
野猪不是猪🐗:现在的环境就是这样,供远大于求。 以前卡学历,现在最高学历不够卡了,还要卡第一学历。 还是不够筛,于是还要求得有实习、不能有gap等等... 可能这个岗位总共就一个hc,筛到最后还是有十几个人满足这些要求。他们都非常优秀,各方面都很棒。 那没办法了,看那个顺眼选哪个呗。 很残酷,也很现实
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务