学习线性表过程中,遇到不懂的代码

#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,因而进入不了循环。

 

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/a92412/p/10595515.html