horizonshd 发表于 2015-9-20 09:54:38

麻烦大神帮我看看,就是创建一个链表,但运行时不能输出链表

//创建一个链表并输出

#include<stdio.h>
#include<malloc.h>

struct Node * CreatList( int);//声明创建链表的函数

struct Node{
        int data;
        struct Node *next;
};                            //定义结构体-节点

int main()
{
        int n;
        int t;
        struct Node * p,*q;
        printf("输入要创建的链表长度n:");
        scanf("%d",&n);
        p=CreatList(n);            //创建n+1个节点的链表
        q=p;
       
        printf("输入n个数据到链表:");
        for(p;p->next->next!=NULL;p++){
                scanf("%d",&t);
                p->next->data=t;
        }                           //读入n个数到链表

        for(q;q->next->next!=NULL;q++){
                printf("%d",q->next->data);
        }

        return 0;
}

struct Node * CreatList(int n)
{
        struct Node A;         //链表头结点
        struct Node *p,*q,*T;
        int i;
        p=q=&A;

        for(i=0;i<n;i++){
                T=(struct Node *)malloc(sizeof(struct Node));    //每次在链表中添加的新节点
                p->next=T;
                p=p->next;
                p->next=NULL;
        }

        return q;
}                        //创建链表函数原型

战w9diwdo 发表于 2015-9-29 14:47:54

//创建一个链表并输出

#include<stdio.h>
#include<malloc.h>


typedef struct Node{
      int data;
      struct Node *next;
}Node, *LinkList;                            //定义结构体-节点



void CreatList(int n, LinkList L)
{
      Node *p,*T;
      int i;
      p=L;

      for(i=0;i<n;i++){
                T=(struct Node *)malloc(sizeof(struct Node));    //每次在链表中添加的新节点
                p->next=T;
                p=p->next;
                p->next=NULL;
      }

}                        //创建链表函数原型


int main()
{
      int n;
      int t;
      Node *p, *q;
                LinkListL;
                L = (LinkList)malloc(sizeof(Node));
      printf("输入要创建的链表长度n:");
      scanf("%d",&n);
      CreatList(n, L);            //创建n+1个节点的链表
      p = q = L;


      printf("输入n个数据到链表:");
      for(p; p->next!=NULL; p = p->next){
                scanf("%d",&t);
                p->next->data=t;
      }                           //读入n个数到链表

      for(q; q->next!=NULL; q = q->next){
                printf("%d",q->next->data);
      }

      return 0;
}





这是我改好的程序

战w9diwdo 发表于 2015-9-29 14:55:58

下面说说你犯的错误

首先:
      头节点的设立不能在函数体中,否则函数执行完毕后就会自动删除头节点,所以就无法return头节点地址,所以要在main函数中预先设立头指针,然后将头指针传入create函数。

其次:
      main函数中的数据输入循环和数据打印循环中,自增语句(for语句的最后一个)你写“p++,q++”有什么意义?这是指针,不是整形!!所以正确的写法是p = p->next, q = q->next


最后说一点我自己的习惯:
      写程序最好写在开头,我不习惯写在后面然后在前面声明函数

战w9diwdo 发表于 2015-9-29 14:56:32

打这么多,给我评分,赞啊啊啊!!!!!!!!!!!!!!

战w9diwdo 发表于 2015-9-29 14:58:35

写程序的时候要谨慎,犯的错误太多,而且要学会自己调试
页: [1]
查看完整版本: 麻烦大神帮我看看,就是创建一个链表,但运行时不能输出链表