王雨欣744 2022-10-06 16:05 采纳率: 77.8%
浏览 43
已结题

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

img

img


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

  • 写回答

4条回答 默认 最新

  • 关注

    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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 10月14日
  • 已采纳回答 10月6日
  • 创建了问题 10月6日

悬赏问题

  • ¥15 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了