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

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日

悬赏问题

  • ¥50 有偿求qftp工具。能连接,下载文件,发送代码,windows环境,最好qt6 要qt creator写的
  • ¥70 刚刚看到一个人的网站居然是通过cname访问的
  • ¥15 Attributeerror:super object has no attribute '__sklearn_tags__'_'
  • ¥15 逆置单链表输出不完整
  • ¥15 宇视vms-B200-A16@R启动不了,如下图所示,在软件工具搜不到,如何解决?(操作系统-linux)
  • ¥500 寻找一名电子工程师完成pcb主板设计(拒绝AI生成式答案)
  • ¥15 关于#mysql#的问题:UNION ALL(相关搜索:sql语句)
  • ¥15 matlab二位可视化能否针对不同数值范围分开分级?
  • ¥15 已经创建了模拟器但是不能用来运行app 怎么办😭自己搞两天了
  • ¥15 关于#极限编程#的问题,请各位专家解答!