单链表输出有问题,没有结果输出

img

img


单链表输出没结果,希望能有人解决谢谢,实践活动好粗度记得记得就登记点

C语言里没有引用的说法,引用是C++里的概念,你的函数参数里用&的都有问题,改成指针。
运行结果:

img

代码修改如下:

#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
    int data;
    struct Node* next;
}Node,*LinkList;

void InitList(LinkList *L)
{
    (*L) = (LinkList)malloc(sizeof(Node));
    (*L)->next = NULL;
}

void CreateList(LinkList* L)
{
    LinkList p;
    int x;
    char ch;
    
    LinkList r = (*L);

    printf("请输入数据元素:\n");
    while(1)
    {
        scanf("%d",&x);
        p = (LinkList)malloc(sizeof(Node));
        p->next = NULL;
        p->data = x;
        
        r->next = p;
        r = p;
        ch = getchar();
        if(ch =='\n')
            break;
    }
}

void InsList(LinkList *L,int i,int e)
{
    int k = 1;
    LinkList p,t;
    t = (LinkList)malloc(sizeof(Node));
    t->data = e;
    t->next = NULL;

    p = *L;
    
    while(p && k<i)
    {
        p = p->next;
        k++;
    }
    if(p)
    {
        t->next = p->next;
        p->next = t;
    }else
    {
        free(t);
        t = 0; //插入失败
    }
}

int GetData(LinkList L,int i,int *e)
{
    int k = 1;
    LinkList p = L->next;
    while(p && k<i)
    {
        p = p->next;
        k++;
    }
    if(k==i)
    {
        *e = p->data;
        return 1;//表示成功
    }else
        return 0;//表示获取失败
}

void printfList(LinkList L)
{
    if(!L)
    {
        printf("error\n");
        return;
    }
    LinkList p = L->next;
    while(p)
    {
        printf("%d ",p->data);
        p = p->next;
    }
    printf("\n");
}

void DeleteList(LinkList *L,int i)
{
    int k = 1;
    LinkList p,q;
    p = *L;
    while(p->next && k<i)
    {
        p = p->next;
        k++;
    }

    if(p->next)
    {
        q = p->next;
        p->next = q->next;
        free(q);
    }else
        printf("删除失败\n");

}


int main()
{
    LinkList L;
    int e=0;
    InitList(&L);
    CreateList(&L);
    printf("新建链表:\n");
    printfList(L);
    InsList(&L,2,25);
    printf("在第2个位置插入25后:\n");
    printfList(L);
    
    DeleteList(&L,1);
    printf("删除第1个元素后:\n");
    printfList(L);

    if(GetData(L,4,&e))
        printf("获取第4个元素:%d\n",e);
    else
        printf("获取失败\n");
    return 0;
}

能把代码字节贴出来不,好调试
GetData函数返回值是void的话,你怎么把e返回给调用程序呢???
printfList函数中,应该是
while(p)
{
printf("%d",p->data);
p = p->next;
}
这两行需要都在while的代码块中,否则死循环
createList函数中,你又为L申请了空间,那initList岂不是白忙乎?
你输入值x的时候,是整型,但判断输入换行符结束。%d是不会接收换行符的啊
=====
代码问题一堆,怎么把错误的责任算到printfList呢,虽然它确实也有问题......

我博客中刚好有单链表的操作,你可以看看,希望对你有用。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632