#1.代码段1:功能:删除链表中的指定数据。
##1.1.代码1:
void ListDelete(LinkList &L,ElemType e)//1
{ //2
LinkList r=L->next; //3
if(r==NULL) //4
int i ; //5
else //6
{ //7
int i=1,j=0; //8
while(r!=NULL&&r->data!=e){ //9
r=r->next; //10
i++; //11
} //12
LinkList p=L,q; //13
while(j<i-1&&p!=NULL)//14 (i-1原因:j是从0开始,且q为继承指定元素结点)
{ //15
j++; //16
p=p->next; //17
} //18
q=p->next; //19
if(q==NULL) //20
cout<<e<<"找不到!"<<endl; //21
else //22
{ //23
p->next=q->next; //24
delete q;} //25
} //26
} //27
##1.2.不懂得地方:9到19行:功能上不懂。
自我分析:9到12行用来寻找指定的元素,但我认为当循环结束时,此时p结点已经指向指定元素,或指向结束位置。我觉得只要删除此时结点即可,或输出找不到该元素。13到19行就是为了将指定值的结点赋给q,并删除。个人认为13到19不需要,但如果没有,运行失败,原因不清楚。
#2.代码段2简介:逆置链表中元素排列。
##2.1代码2:
void ReverseList(LinkList &L){ //1
LNode *q,*p; //2
p=L->next; //3
L->next = NULL; //4
while(p!=NULL){ //5
q = p; //6 (头插法逆置)
p = p->next; //7
q->next = L->next; //8
L->next=q; //9
}//10
} //11
##2.2自己不懂的地方:3到5行:功能不懂。
自我分析:首先不清楚L->next的原因,且p继承L->next的结点,那结点p应该p ==NULL,因而进入不了循环。
原文:https://www.cnblogs.com/a92412/p/10595515.html