C语言单链表,为什么输出7位数字?

程序代码如下,为了方便我是制作了一个0到10的链表#include"stdio.h"#include<stdlib.h>structNode;typedefstructN... 程序代码如下,为了方便我是制作了一个0到10的链表
#include"stdio.h"
#include <stdlib.h>
struct Node;
typedef struct Node * Pnode;
struct Node
{
int info;
Pnode * link;
};
typedef struct Node*Linklist;
Linklist creat_linklist()
{
int i;
Pnode q=(Pnode)malloc(sizeof(struct Node));
Linklist llist=(Linklist)malloc(sizeof(struct Node));
if(llist!=NULL)llist=NULL;
for(i=0;i<10;i++)
{
if(llist==NULL)llist=q;
else
{
q=(Pnode)malloc(sizeof(struct Node));
q->info=i;
q=q->link;
}
}
return llist;
}
void print_Linklist(Linklist llist)
{
int i;
Pnode q=(Pnode)malloc(sizeof(struct Node));
q=llist;
for(i=0;i<10;i++)
{
printf("%6d\n",q->info);
q=q->link;
}
}
int main()
{
Linklist llist=creat_linklist();
print_Linklist(llist);
}
展开
 我来答
IT孤鹜
2014-06-27 · TA获得超过4198个赞
知道大有可为答主
回答量:3960
采纳率:71%
帮助的人:3599万
展开全部
#include"stdio.h"
#include <stdlib.h>
struct Node;
typedef struct Node * Pnode;
struct Node
{
    int info;
    Node * link;
};
typedef struct Node *Linklist;
Linklist creat_linklist()
{
    int i;
    Pnode q,p;
    Linklist llist;
llist=NULL;
    //if(llist!=NULL)llist=NULL;
    for(i=0;i<10;i++)
    {
 q=(Pnode)malloc(sizeof(struct Node));
         q->info=i;
        if(llist==NULL)llist=p=q;
        else
        {
           
            p->link=q;
p = q;
        }
    }
p->link=NULL;
    return llist;
}
void print_Linklist(Linklist llist)
{
    int i;
    Pnode q;
    q=llist;
    for(i=0;i<10;i++)
    {
        printf("%6d\n",q->info);
        q=q->link;
    }
}
int main()
{
    Linklist llist=creat_linklist();
    print_Linklist(llist);
}
匿名用户
推荐于2017-09-02
展开全部
在creat_linklist()函数里,返回的链表是llist。
在for循环之前,llist=NULL;
进入for循环中,当i=0时,让llist=q,但是q->info是没有赋过值的。
当i>0时,q重新创建了一个Node,虽然你给q->info赋值了,但是q并没有追加到llist上去。

Linklist creat_linklist()
{
    int i;
    Pnode q = NULL;
    Pnode lastNode = NULL; //最后产生的node
    Linklist llist = NULL;
    for(i=0; i<10; i++)
    {
        //创建新Node
        q=(Pnode)malloc(sizeof(struct Node));
        q->info=i;
        q->link = NULL;
        
        if(llist==NULL)
            llist=q;
        else
            lastNode->link = q;
            
        lastNode = q;        
    }
    return llist;
}
更多追问追答
追问
请问可以说下lastnode,llist,q的关系吗,我逻辑上有点乱
追答
llist代表一个链表,llist始终指在链表的头部。
lastNode代表最后产生的node。向llist追加node的时候,就是向最后一个node的link上追加新Node。所以需要知道llist的最后一个node是谁,用lastNode来记住最后一个node。

q代表新产生的node,q一旦追加到lastNode上就不再起作用了(q用于下次创建node了)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d580670
2014-06-27 · TA获得超过1983个赞
知道大有可为答主
回答量:2054
采纳率:82%
帮助的人:710万
展开全部
#include"stdio.h"
#include <stdlib.h>
struct Node;
typedef struct Node * Pnode;
struct Node
{
  int info;
  Pnode * link;
};
typedef struct Node*Linklist;
Linklist creat_linklist()
{
  int i;
  Linklist node = NULL;
  Linklist head = NULL;
  for (i = 0;i < 10;i++)
  {
    Linklist cur = (Linklist)malloc(sizeof(struct Node));
    cur->info = i;
    cur->link = NULL;
    if (node == NULL)
    {
      head = node = cur;
    }
    else
    {
      node->link = cur;
      node = cur;
    }
  }
  return head;
}
void print_Linklist(Linklist llist)
{
  int i;
  while (llist)
  {
    printf("%6d\n", llist->info);
    llist = llist->link;
  }
}
int main()
{
  Linklist llist = creat_linklist();
  print_Linklist(llist);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式