求助,吐血.jpg。。。链表问题

一墨千里无色 2018-03-19 03:52:59
emmm做数据结构作业,下面这个代码运行就出错不报错。
遍历出了问题吗?
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
int main()
{
LinkList head=NULL;
head=(LinkList)malloc(sizeof(LNode));
void creat(LinkList head);
void travel(LinkList head);
creat(head);
travel(head);
return 0;
}
void creat(LinkList head)
{
printf("Input the content:\n");
LinkList p1,p2;
p1=p2=(LinkList)malloc(sizeof(LNode));
head->next=p1;
while(p1->data)
{
p1=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p1->data);
if(p1->data!=0)
{p2->next=p1;p2=p1;}
}
p2=NULL;
free(p1);
}
void travel(LinkList head)
{
LinkList L=head->next;
while(L!=NULL)
{
printf("%d\t",L->data);
L=L->next;
}
谢各位大佬!
...全文
282 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
一墨千里无色 2018-03-19
  • 打赏
  • 举报
回复
引用 3 楼 cfjtaishan 的回复:
void creat(LinkList head)
{
printf("Input the content:\n");
LinkList p1,p2;
p1=p2=(LinkList)malloc(sizeof(LNode));
head->next=p1;
while(p1->data)
{
p1=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p1->data);
if(p1->data!=0)
{p2->next=p1;p2=p1;}
}
p2=NULL;
free(p1);
}
把你的这部分代码和我给你的修改对比一下;如上你的代码逻辑。p1申请了堆上空间,有没有对p1->num初始化?没有初始化就while(p1->num)是不是会有问题;
谢谢大佬!! 好久没敲代码了低级错误出现了。。 灰常感谢指点
自信男孩 2018-03-19
  • 打赏
  • 举报
回复
void creat(LinkList head)
{
printf("Input the content:\n");
LinkList p1,p2;
p1=p2=(LinkList)malloc(sizeof(LNode));
head->next=p1;
while(p1->data)
{
p1=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p1->data);
if(p1->data!=0)
{p2->next=p1;p2=p1;}
}
p2=NULL;
free(p1);
}
把你的这部分代码和我给你的修改对比一下;如上你的代码逻辑。p1申请了堆上空间,有没有对p1->num初始化?没有初始化就while(p1->num)是不是会有问题;
一墨千里无色 2018-03-19
  • 打赏
  • 举报
回复
引用 1 楼 cfjtaishan 的回复:
#include<stdio.h>
#include<stdlib.h>

typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*LinkList;

void creat(LinkList head);
void travel(LinkList head);

int main()
{
    LinkList head=NULL;

    head = (LinkList)malloc(sizeof(LNode));
    if (!head)
        exit(0);

    creat(head);
    travel(head);
    return 0;
}
void creat(LinkList head)
{
    printf("Input the content:\n");
    LinkList p1, p2;
    p1 = (LinkList)malloc(sizeof(LNode));
    if (!p1)
        exit(0);
    scanf("%d",&p1->data);
    p2 = head;
    while(p1->data)
    {
        p2->next = p1;
        p2 = p1;
        p1 = (LinkList)malloc(sizeof(LNode));
        if (!p1)
            exit(0);
        scanf("%d",&p1->data);
    }
    p2->next = NULL;
    free(p1);
}
void travel(LinkList head)
{
    LinkList L = head->next;
    while(L) {
        printf("%d\t",L->data);
        L = L->next;
    }
    putchar(10);
}
参考一下吧 注意创建链表时的逻辑,可以对比一下代码找原因。
引用 1 楼 cfjtaishan 的回复:
#include<stdio.h>
#include<stdlib.h>

typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*LinkList;

void creat(LinkList head);
void travel(LinkList head);

int main()
{
    LinkList head=NULL;

    head = (LinkList)malloc(sizeof(LNode));
    if (!head)
        exit(0);

    creat(head);
    travel(head);
    return 0;
}
void creat(LinkList head)
{
    printf("Input the content:\n");
    LinkList p1, p2;
    p1 = (LinkList)malloc(sizeof(LNode));
    if (!p1)
        exit(0);
    scanf("%d",&p1->data);
    p2 = head;
    while(p1->data)
    {
        p2->next = p1;
        p2 = p1;
        p1 = (LinkList)malloc(sizeof(LNode));
        if (!p1)
            exit(0);
        scanf("%d",&p1->data);
    }
    p2->next = NULL;
    free(p1);
}
void travel(LinkList head)
{
    LinkList L = head->next;
    while(L) {
        printf("%d\t",L->data);
        L = L->next;
    }
    putchar(10);
}
参考一下吧 注意创建链表时的逻辑,可以对比一下代码找原因。
可以了!谢谢。 但我想知道我错在哪里了。。= = 够贱的链表不对吗?应该是不规范,但逻辑上哪里错了呢?
自信男孩 2018-03-19
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>

typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*LinkList;

void creat(LinkList head);
void travel(LinkList head);

int main()
{
    LinkList head=NULL;

    head = (LinkList)malloc(sizeof(LNode));
    if (!head)
        exit(0);

    creat(head);
    travel(head);
    return 0;
}
void creat(LinkList head)
{
    printf("Input the content:\n");
    LinkList p1, p2;
    p1 = (LinkList)malloc(sizeof(LNode));
    if (!p1)
        exit(0);
    scanf("%d",&p1->data);
    p2 = head;
    while(p1->data)
    {
        p2->next = p1;
        p2 = p1;
        p1 = (LinkList)malloc(sizeof(LNode));
        if (!p1)
            exit(0);
        scanf("%d",&p1->data);
    }
    p2->next = NULL;
    free(p1);
}
void travel(LinkList head)
{
    LinkList L = head->next;
    while(L) {
        printf("%d\t",L->data);
        L = L->next;
    }
    putchar(10);
}
参考一下吧 注意创建链表时的逻辑,可以对比一下代码找原因。

33,311

社区成员

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

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