如何从一个链表中,找出重复的数据,并找出次数
链表节点只有一个数据和指针,如一个数列1,1,1,2,3,3,4,4,我希望得到一个新的链表,链表节点包含两个数据(数字和次数)如,3个1,1个2,2个3,2个4。
我的思想是:从链表开始来,找出后就将原链表中数据置为0作为标记,然后再删去节点,指导找出所有的,但原链表中数据可能为0,所以以0作为标记,有Bug.求高人指教。
[解决办法]
1.如果原来的数据是连续的 那么可以用一个统计变量 如果当前节点的下一个数据与自己相同 就删除自己 统计变量+1 如果不同 就吧统计变量赋值给当前节点 并重置统计变量 这样做的话还得用一个变量来标识 第一个数据是多少
2。如果只是有序的话 那么就用两个节点来表示一个数据和他的个数 做一个约定 例如:前面的一个数据是数据本身 后一个数据是该数据的个数 只有一个的在其中添加一个无效节点表示,像楼主的这组数据最后得到这样的链表:1 3 2 0 3 2 4 2 基数(从1开始计数)的节点表示数据 偶数的节点表示个数
[解决办法]
你可以这样做,先获得原始链表的大小,然后申请一个同样大小空间的数组来保存是否已经统计过的标志。(0没有统计过,1统计过),然后每次遍历链表的时候都是从头结点开始遍历,每访问下一个节点进行计数,然后在数组中相应位置查询标志位。遍历结束的条件就是数组所有标志位都为1.这样就避免了删除链表的开销及其多种复杂情况的考虑。