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);
} 展开
#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);
} 展开
3个回答
展开全部
#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了)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询