成为上进青年 2023-03-26 18:32 采纳率: 83.3%
浏览 51
已结题

c++中使用链表去重,再删除节点时遇到问题

题目要求使用链表进行图书去重,书号唯一。
对输出进行测试发现我在删除节点时,将图书信息重复的两个节点都进行了删除,导致对后面图书的重复判断产生影响,不知道为什么会这样,该怎样改正呢,谢谢!

这是我的代码


int DupRemoval_L(LinkList &L)
{//图书去重
/**************begin************/
int i=0,j,f;
LNode *r;
LNode *p=L->next->next,*q=L;
while(p!=NULL){     //p从第二本图书开始循环
    r=L->next;i++;j=i;       //i,j用来标记内层while循环次数    
    f=0;      cout<<i<<endl;            //f标记是否重复,初值为0,若重复则为1
    while(j--)           //要比较的图书个数
   {
      if(strcmp(r->data.no,p->data.no)==0)  //r为每次要比较的图书,若书号相等,则f标记为1,否则r变为下一本图书进行比较
      {
          f=1;break;
     }
      else r=r->next;
     }
     if(f==0) {p=p->next;q=q->next;}   //比较完成,若f仍为0,则p变为下一本图书,判断有无重复,否则删掉该节点。
     else {
         q->next=p->next;
         delete p;
         p=q->next;
         i=i-1;
     }
    }
     return OK;
    /**************end************/
}

这是想要的输出

img

这是我的输出

img

  • 写回答

2条回答 默认 最新

  • WuShF.top 2023-03-27 18:14
    关注

    (设从1开始,而不是0)
    r每轮指向第二个节点。
    q初始指向第一个节点。
    p初始指向第三个节点。
    每轮循环,pq右移,r右移。
    判断用的是r和p,修改用的是q和p。
    第七个和第八个重复。
    发现重复的时候q指向第六个,r指向第七个,p指向第八个。
    修改q和p,从第六个指向第八个的下一个。
    于是就少了7和8。
    (课上手机打的字,不太方便,可能有问题,望指正)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月27日
  • 已采纳回答 3月27日
  • 创建了问题 3月26日

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错