题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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):
# 第一步先检测一下是不是空的或者是不是只有一个
if pHead is None or pHead.next is None:
return pHead
# 第二步因为防止第一个就是重复的节点,所以创作一个新的头节点。
#假设头结点的值为-1
first = ListNode(-1)
# 因为需要两个指针,一个指着重复结点上一个结点,一个指着重复结点后一个值。
first.next = pHead
last = first
while pHead and pHead.next:
#如果当前的值和下一个节点的值是否相等
if pHead.val == pHead.next.val:
#把当前的值保存起来
val = pHead.val
#判断当前值和之后的节点是否相等
while pHead and val == pHead.val:
#当前值与下一个节点的值相等,当前指针往后移动一位
pHead = pHead.next
#退出循环之后 将相同的节点删除,即前一个不相同的节点的next指向当前节点
last.next = pHead
else:
#节点不相同,指针向后移
last = pHead
pHead = pHead.next
return first.next