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

程序代码如下,为了方便我是制作了一个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;
    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);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于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了)

追问

理解了,谢谢啊

弱弱的问一句为何我运行报内存了(⊙o⊙)

追答

在程序中增加断点,一步一步跟踪调试,看看哪里出错。

本回答被提问者采纳
第2个回答  2014-06-27
#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);
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网