【剑指Offer_10】删除链表中重复的结点

题目描述

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

一、 跑两遍链表,适用于有序和无序链表。

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def deleteDuplication(self, pHead):
        # write code here
        mp = {}
        temp = []
        pt = pHead
        while pt != None:
            if mp.get(pt.val) == None:
                mp[pt.val] = 1
            else:
                mp[pt.val] = 2
            pt = pt.next
            
        pt = pHead
        flag = False
        ans = None
        while pt != None:
            if mp[pt.val] == 1:
                if flag == False:
                    newNode = ListNode(pt.val)
                    ans = newNode
                    flag = True
                else:
                    newNode.next = ListNode(pt.val)
                    newNode = newNode.next
            pt = pt.next
            
        return ans

二、 跑一遍,只适用于有序链表。

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def deleteDuplication(self, pHead):
        # write code here
        pre = -1
        flag = False
        newNode = None
        ans = None
        while pHead != None:
            need = False
            if pHead.val == pre:
                pass
            elif pHead.next == None:
                need = True
            elif pHead.val != pHead.next.val:
                need = True

            if need == True:
                if flag == False:
                    newNode = ListNode(pHead.val)
                    ans = newNode
                    flag = True
                else:
                    newNode.next = ListNode(pHead.val)
                    newNode = newNode.next
            pre = pHead.val
            pHead = pHead.next
        return ans

猜你喜欢

转载自blog.csdn.net/Vici__/article/details/104384825