成为上进青年 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 关于c++外部库文件宏的问题,求解
  • ¥15 office打开卡退(新电脑重装office系统后)
  • ¥300 FLUENT 火箭发动机燃烧EDC仿真
  • ¥15 【Hadoop 问题】Hadoop编译所遇问题hadoop-common: make failed with error code 2
  • ¥15 vb6.0+webbrowser无法加载某个网页求解
  • ¥15 RPA财务机器人采购付款流程
  • ¥15 计算机图形多边形及三次样条曲线绘制
  • ¥15 根据protues画的图用keil写程序
  • ¥200 如何使用postGis实现最短领规划?
  • ¥15 pyinstaller打包错误