小发现

这个简单的问题没想到我现在才弄清了,不过弄清了就好,一天进步一点点!

我通过代码来说明:

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(这只是我的猜想),等我查查资料了再做回答吧,我先去写栈的基本操作了,写完了就可以玩了,毕竟今天还是国庆节的假期中,哈哈,得抓紧时间玩,不然上课了就又有事情忙了,期待下一次的博客!

posted @ 2020-10-07 15:27  jianzhui  阅读(83)  评论(0编辑  收藏  举报