这个简单的问题没想到我现在才弄清了,不过弄清了就好,一天进步一点点!
我通过代码来说明:
int a = 1;
int b = a;
a = 3;
printf("b is %d",b);
这个运行的结果b is 1,因为b 赋值的时候a = 1.就算后续a再变化b也是当时的值。
接下来就可以运用到链表的删除上来了。书上有两个版本,但我没有看懂第一个版本为什么有问题,若有大佬帮我回答,在下不胜感激!
第一个版本:
void DeleteList1 (List L)
{
List p = L->next;
L->next = NULL;//这里虽然L这个链表后续为NULL,但对p链表没有影响。
while (p != NULL) {
free(p);
p = p->next;
}
}
void Delete2 (List L)
{
List p,temp;
p = L->next;
L->next = NULL;
while (p ! = NULL) {
temp = p->next;
free(p);
p = temp;
}
}
我好像也隐隐约约感受到了,是不是因为free(p)的原因,导致p后面的片段丢失,p = p->next就会为NULL(这只是我的猜想),等我查查资料了再做回答吧,我先去写栈的基本操作了,写完了就可以玩了,毕竟今天还是国庆节的假期中,哈哈,得抓紧时间玩,不然上课了就又有事情忙了,期待下一次的博客!