随记123 2022-04-07 20:57 采纳率: 100%
浏览 338
已结题

error C2223: left of '->next' must point to struct/union 为什么?

写的用c语言实现单链表的建立、插入与删除,但是 L->next = NULL; q->next = L->next; L->next = q; Linklist p = L->next; 这几句都出现error C2223: left of '->next' must point to struct/union ,这个错误,怎么改正啊,求救,感谢。
明明定义了结构体 为什么还一直说->next左边的不是结构体呢?

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

typedef struct Lnode
{
    int data;
    struct Lnode *next;
} Lnode, *Linklist;

int main()
{
    Linklist L;
    int i, e, n;

    int CreateList(Linklist * L, int n);
    void ShowList(Linklist * L);
    int ListInsert(Linklist * L, int i, int e);
    int Listdelete(Linklist * L, int i);

    printf("请输入初始化的单链表的元素数:");
    scanf("%d", &n);
    CreateList(L, n);

    printf("Lnode:"); //输出单链表
    ShowList(L);

    printf("请输入你要插入元素的位置和元素值:");
    scanf("%d %d", &i, &e);
    ListInsert(L, i, e);

    printf("insert:"); //输出插入e后的单链表
    ShowList(L);

    scanf("%d", &i);
    Listdelete(L, i);

    printf("\ndelete:"); //输出删除元素后的单链表
    ShowList(L);

    return 0;
}

//创建单链表(初始化、逆序输入)
int CreateList(Linklist *L, int n)
{
    Linklist q;
    int i;
    L = (Linklist)malloc(sizeof(Lnode));
    L->next = NULL;
    for (i = n; i > 0; --i)
    {
        q = (Linklist)malloc(sizeof(Lnode));
        q->data = i + 1;
        q->next = L->next;
        L->next = q;
    }
    return 0;
}

//输出单链表
void ShowList(Linklist *L)
{
    Linklist p = L->next;
    while (p)
    {
        printf("%d,", p->data);
        p = p->next;
    }
    printf("\n");
}

//单链表的插入(在第i个位置上插入元素e)
int ListInsert(Linklist *L, int i, int e)
{
    Linklist q, p = L;
    int j = 0;
    while (p && j < i - 1)
    {
        p = p->next;
        ++j;
    } //找到第i-1个结点
    if (!p || j > i - 1)
    {
        printf("插入位置错误!ERROR!\n");
        return -1;
    } //删除位置不合理
    else
    {
        q = (Linklist)malloc(sizeof(Lnode));
        q->data = e;
        q->next = p->next;
        p->next = q;
    }
    return 0;
}

//单链表的删除(删除第i个位置上的值,并输出e)
int Listdelete(Linklist *L, int i)
{
    Linklist q, p = L;
    int e, j = 0;
    while (p && j < i - 1)
    {
        p = p->next;
        ++j;
    } //寻找第i个节点,并令p指向其前驱
    if (!(p->next) || j > i - 1)
    {
        printf("插入位置错误!ERROR!\n");
        return -1;
    } //删除位置不合理
    else
    {
        q = p->next;
        e = q->data;
        printf("Deleted element:=%d", e);
        p->next = q->next;
        free(q);
    }
    return 0;
}

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-04-07 21:07
    关注

    你这个L是指针的指针啊
    所以你要写成 *L->next

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月16日
  • 已采纳回答 4月8日
  • 创建了问题 4月7日

悬赏问题

  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题