龙空技术网

No82.删除排序链表中的重复元素 #程序员

马彼得 5

前言:

目前我们对“c语言删除单链表中的重复元素”大约比较讲究,各位老铁们都想要剖析一些“c语言删除单链表中的重复元素”的相关文章。那么小编同时在网络上网罗了一些有关“c语言删除单链表中的重复元素””的相关资讯,希望咱们能喜欢,小伙伴们快快来了解一下吧!

说说删除排序列表中重复元素这道题。

题目中有已排序的列表,要删除其中所有重复元素,如列表中有两个三、两个四,需删除后剩下一、二、五。

解题思路如下:

先确定一个压结点,压结点的下一个指针指向一。然后在节点的下一个节点及下下个节点都不为空时,判断它们的值是否相等。若不相等,压结点往后移到一,因不相等不代表不可能相等,可能是一、二、二。

接着反复执行此逻辑,若压节点的下一个节点和下下个节点相等,如两个三,就从该节点开始及下一个节点判断是否等于该节点值,若全是三,就把中间这些三删除。如题目中那样,会在到四的时候把两个三删除,此时压节点还是二,接着把两个四也删除,最终变成一、二、五。

要利用压节点的下一个节点及下下个节点,先判断边界条件,若 head 等于空或 head 的下一个等于空,就基本可确定无重复元素。

然后定义一个亚节点,单指针指向头节点,再定义一个单位 time,因会随时移动亚结点,原始亚结点不能动,最后返回结果时用,让临时变量指向亚结点的下一个节点。

此时记录一下,看它的下一个节点,然后判断,因这两个节点已确定,所以判断值是否相等,若不相等,压节点向后移动一步,如一不等于二,压节点刚开始是负一,这时变成一。否则若相等,判断临时变量的下一个节点不等于空,就从该节点开始便利,且值等于下一个节点的值,若重复,如四个三,后面都是三,一直判断到不重复为止。

若相等,就删除这些重复节点,如把两个三删掉,压结点是二,把压结点的下一个指向四,压接点还是二,接着重复操作,把两个四也删掉,二的下一个接点是五,返回。

没问题,再强调下思路,这是排序列表,若有重复元素必相邻,删除重复元素需定义压结点。从开始就判断第一个节点和第二个节点是否为空,若不为空判断值是否相同,若相同,压节点下一个指向需删除这段相同节点,判断出一是一,若相同还需判断下一个节点是否还是一,向下便利,直到遇到不同元素,说明这些一要删掉。此时压节点是负一,负一和四之间把这些节点删掉就是让负一的下一个指针直接指向四,大概就是这样的思路。今天就到这了。

标签: #c语言删除单链表中的重复元素