新手链表问题

文坨 2019-03-04 07:45:23
实在是搞不懂了 无论怎么改程序刚输入完第一个值就停了 感觉是思路出了问题,能帮我看下嘛 #include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct grade { int s; struct grade*next } n; n*creat(void) { n*head,*node,*end; head=NULL; while(1) { node=(n*)malloc(sizeof(n)); node->next=NULL; scanf("%d",node->s); printf("&"); if(head->next=NULL) head->next=node; else end->next=node; node->next=NULL; end=node; if(node->s==0) { end->next=NULL; break; } } return(head); } main() { n*p; p=creat(); while(p->next!=NULL) { p=p->next; printf("%d",p->s); } }
...全文
87 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
636f6c696e 2019-03-05
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct grade
{
    int s;
    struct grade*next
    } n;

n*creat(void)
{
    n*head,*node,*end;
    head=NULL;
    while(1)
    {

        node=(n*)malloc(sizeof(n));
        node->next=NULL;
        scanf("%d", &node->s);
        printf("&");
        if (head == NULL) {
            head = node;
            end = node;
        }
        else
            end->next=node;
        node->next=NULL;
        end=node;

        if(node->s==0)
        {   end->next=NULL;
            break;
        }

    }
    return(head);
}


void main()
{
    n*p;
    p=creat();
    while(p->next!=NULL)
    {
        printf("%d",p->s);
        p=p->next;
    }
}
你的代码基础上改的,大致三个问题: 1. scanf输入的是指针 2. 你的代码没有对第一次进入循环进行判断,第一次进循环head是空指针直接挂了 3. main函数打印的地方应该先打印,不然打不出头指针的值
文坨 2019-03-05
  • 打赏
  • 举报
回复
引用 1 楼 niiiloc的回复:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct grade
{
    int s;
    struct grade*next
    } n;

n*creat(void)
{
    n*head,*node,*end;
    head=NULL;
    while(1)
    {

        node=(n*)malloc(sizeof(n));
        node->next=NULL;
        scanf("%d", &node->s);
        printf("&");
        if (head == NULL) {
            head = node;
            end = node;
        }
        else
            end->next=node;
        node->next=NULL;
        end=node;

        if(node->s==0)
        {   end->next=NULL;
            break;
        }

    }
    return(head);
}


void main()
{
    n*p;
    p=creat();
    while(p->next!=NULL)
    {
        printf("%d",p->s);
        p=p->next;
    }
}
你的代码基础上改的,大致三个问题: 1. scanf输入的是指针 2. 你的代码没有对第一次进入循环进行判断,第一次进循环head是空指针直接挂了 3. main函数打印的地方应该先打印,不然打不出头指针的值
哇谢谢大佬,这问题卡了我一星期了 我大概试了一下 最主要是head还没指向节点我就用了head->next=... 改成head=就好了
自信男孩 2019-03-05
  • 打赏
  • 举报
回复
引用 1 楼 niiiloc 的回复:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct grade
{
int s;
struct grade*next
} n;

n*creat(void)
{
n*head,*node,*end;
head=NULL;
while(1)
{

node=(n*)malloc(sizeof(n));
node->next=NULL;
scanf("%d", &node->s);
printf("&");
if (head == NULL) {
head = node;
end = node;
}
else
end->next=node;
node->next=NULL;
end=node;

if(node->s==0)
{ end->next=NULL;
break;
}

}
return(head);
}


void main()
{
n*p;
p=creat();
while(p->next!=NULL)
{
printf("%d",p->s);
p=p->next;
}
}


你的代码基础上改的,大致三个问题:
1. scanf输入的是指针
2. 你的代码没有对第一次进入循环进行判断,第一次进循环head是空指针直接挂了
3. main函数打印的地方应该先打印,不然打不出头指针的值


在你的基础上做的修改,注意最后一个节点,即node->s为0的节点,如果不需要加入链表,可以考虑将其释放了。

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

typedef struct grade
{
int s;
struct grade *next;
} n;

n*creat(void)
{
n*head,*node,*end;
head=NULL;
while(1)
{

node=(n*)malloc(sizeof(n));
node->next = NULL;
scanf("%d", &node->s);

if (node->s == 0) {
free(node);
break;
}
//printf("&");
if (head == NULL) {
head = node;
end = node;
} else {
end->next = node;
end = node;
}
/*
//node->next=NULL;

if(node->s==0)
{ end->next=NULL;
break;
}
*/

}

return(head);
}


//void main()
int main()
{
n*p;
p=creat();
//while(p->next!=NULL)
while(p)
{
printf("%d",p->s);
p=p->next;
}

return 0;
}
赵4老师 2019-03-05
  • 打赏
  • 举报
回复
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧