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

2025-04-02 21:37:43
推荐回答(3个)
回答1:

#include"stdio.h"
#include 
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);
}

回答2:

在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;
}

回答3:

#include"stdio.h"
#include 
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);
}