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

本文介绍了一种从已排序链表中删除重复元素的方法,通过定义一个特殊节点来处理链表头部可能出现的重复问题,并提供了详细的实现步骤及代码示例。

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

------------------------------------

删除重复结点,只需要如下操作

#一开始我们就要定义一个节点。
class ListNode:
	def __init__(self,x):
		self.val = x
		self.next = None
class Soution:
	def deleteDuplication(self,pHead):
		pPre = None
		pCur = pHead
		pNext = None
		while pCur != None:
			if pCur.next != None and pCur.val == pCur.next.val:
				pNext = pCur.next
				while pNext.next != None and pNext.next.val == cur.val:
					pNext = pNext.next
				if pCur == pHead:
					#一直想不明白这一步是为什么
					#原来这一步是为了解决一开始就有相邻重复的问题。如果一开始既有重复的,那么就要将链表头移动到pNext的后一位,去掉一开始的重复。
					pHead = pNext.next
				else:
					#如果一开始没有重复的话,那么就将pPre下一个指到pNext的后一位。
					pPre.next = pNext.next
				pCur = pNext.next
			else:
				pPre = pCur
				pCur = pCur.next
		return pHead

这个链表的问题还是很难的啊,花了一天才想明白这个问题。只要搞清楚链表的增删改查就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值