首页 新闻 搜索 专区 学院

数据结构单链表的创建问题

0
悬赏园豆:5 [已关闭问题] 关闭于 2017-03-28 19:29

正在学习单链表,对单链表创建的函数有两处不明。一是不明白下面绿色代码的具体含义。二是,红色代码中的q->next和&l打印出来不应该是一样的吗,不都是l的地址吗?

# include <stdio.h>
# include <stdlib.h>

typedef struct linklist
{
  int data;
  struct linklist *next;
}list,*link_list;

link_list create_linklist(link_list l, int n)//创建单链表
{
    link_list p,q;
    int i,x;

    l=(list*)malloc(sizeof(list));//创建单链表头结点
    l->next=NULL;
    l->data=5;

    q=l;
    printf("%d:\n",*l); 
    q->next=l;
    printf("%d,%d,%d",q->data,q->next,&l);    //函数本来不需要上面3行代码,只是我尝试理解代码时写的打印而已
    for(i=1;i<=n;i++)
    {
        p=(list*)malloc(sizeof(list));//产生一个新结点
        scanf("%d",&x);
        p->data=x;

        p->next=NULL;
        q->next=p;
        q=q->next;
    }

    return l;
}

int main()
{
    link_list l;
    create_linklist(l, 0);
}

suitcase的主页 suitcase | 菜鸟二级 | 园豆:208
提问于:2017-03-28 18:54
< >
分享
所有回答(1)
1

一是不明白下面绿色代码的具体含义。q=l;//意思是,将l的值给q,而l的值是新开辟的地址的值

                   //所以q 和 l 的值都是新开辟的这个地址的值

二是,红色代码中的q->next  //  你的红色代码中有这一语句:q->next=l;那么它会自身成环,【此时的 q的值和 l的值相同】

              //所以q->next打印出的是新开辟的地址的值

       &l // 打印出的是 l 本身在内存中的地址的值,它的值是新开辟的地址的值,所以不同

Hold_C | 园豆:206 (菜鸟二级) | 2017-06-16 16:43

很感谢你的回答。不过已经在之前弄明白了,所以已经关闭问题了。

支持(0) 反对(0) suitcase | 园豆:208 (菜鸟二级) | 2017-06-16 16:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册