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

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

猜你喜欢

转载自blog.csdn.net/qq_40637313/article/details/89041658
今日推荐