数据结构中的单链表问题(c++)

来源:百度知道 编辑:UC知道 时间:2024/06/15 19:48:35
ListItem ListDelete(int k,List L)
{
link p,q;
ListItem x;
int i;
if(k<1||!L->first)Error("out of bounds");
p=L->first;
if(k==1)L->first=p->next;
else
{
q=L->first;
for(i=1;i<k-1&&q;i++)
{
q=q->next;
}
if(i<k)
{
Error("out of bounds");
exit(0);
}

p=q->next;
q->next=p->next;
}
x=p->element;
free(p);
return x;

}

==============
for(i=1;i<k-1&&q;i++)
{ q=q->next;} 这句是什么意思?
我知道好像有一部分内容是找到k-1位置然后执行{q=q->next;} 然而具体的“&&q;i++)”这部分是什么意思好像不大懂。。。“&&”好像是且符号。。。但&p又好像可以看成是取地址。如果是且i<q???是什么道理?不是充q的位置往后开始找吗?怎么i会出现在q之前呢?何况i一开始是1,而且q一开是的位置也不确定啊。如果看成是且。。。觉得有点看不大懂,但若是看成取地址,也还是不明白,如果是取地址好像也是一样不行。小弟初学C++语言,很多地方都还是小入门,请各位前辈不吝赐教,小弟不胜感激。

让q指向要删除节点的前一个节点,&&就是and连接符,表示连接两个条件,同时成立才成立,有一个为假则式子为假

这里是两个条件,i<k-1,是为了让p=p->next执行k-1次,从而指向k节点 前面的那一个节点,但是p可能总长度没有k-1那么长,就是说执行p=p->next时,可能p=null,指向了最后节点的next了,这时链表总长度都没有k那么长,当然没法删除,直接退出就行

if(i<k)
这个判断我就不懂了,循环退出时或者q==null(同时i<k-1),或者i=k-1,i是肯定小于k的啊,为什么这里判断错误退出了