题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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