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<//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

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

为什么会一下删了两个节点呢😭