又叫我洗袜子 2022-08-04 00:08 采纳率: 100%
浏览 35
已结题

oj952单链表插入操作的实现,求看看哪里出问题了,无法输入。

#include<stdio.h>
#include<stdlib.h>
typedef struct node//单链表
{
int date;
struct node *next;
}node;
typedef struct node *linklist;
void createlist(linklist *&L)//尾插法创建单链表
{
linklist p,r;
int n,i,e;
scanf("%d",&n);
*L=(linklist)malloc(sizeof(node));//L为整个线性表
r=*L;//r为指向尾部的节点
for(i=0;i<n;i++)
{
p=(node *)malloc(sizeof(node));//生成新节点
scanf("%d",&e);
p->date=e;
r->next=p;
r=p;
}
r->next=NULL;
}
void sertlist(linklist *&L)//插入数据
{
int i,j,e;
scanf("%d",&i);
scanf("%d",&e);
linklist p,s;
p=*L;//指向链表头结点
j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
printf("error\n");
s=(linklist)malloc(sizeof(node));
s->date=e;
s->next=p->next;
p->next=s;
}
void showlist(linklist *L)
{
linklist p;
p=*L;
while(p)
{
printf("%d ",p->date);
p=p->next;
}
}
int main()
{
linklist *L;
createlist(L);
sertlist(L);
showlist(L);
return 0;
}

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-08-04 08:39
    关注

    修改处见注释,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    typedef struct node//单链表
    {
        int date;
        struct node* next;
    }node;
    typedef struct node* linklist;
    void createlist(linklist& L)//尾插法创建单链表 linklist*& L 修改
    {
        linklist p, r;
        int n, i, e;
        scanf("%d", &n);
        L = (linklist)malloc(sizeof(node));//L为整个线性表 修改
        //*L = (linklist)malloc(sizeof(node)); 修改
        r = L;//r为指向尾部的节点 修改
        for (i = 0; i < n; i++)  //修改
        {
            p = (node*)malloc(sizeof(node));//生成新节点
            scanf("%d", &e);
            p->date = e;
            r->next = p;
            r = p;
        }
        r->next = NULL;
    }
    void sertlist(linklist& L)//插入数据  linklist*& L 修改
    {
        int i, j, e;
        scanf("%d", &i);
        scanf("%d", &e);
        linklist p, s;
        p = L;//指向链表头结点 p = *L; 修改
        j = 0;//修改 j = 1; 
        while (p && j < i)
        {
            p = p->next;
            j++;
        }
        if (!p || j > i) { //修改
            printf("error\n");
            return;        //修改
        }
        s = (linklist)malloc(sizeof(node));
        s->date = e;
        s->next = p->next;
        p->next = s;
    }
    void showlist(linklist L) //linklist* L 修改
    {
        linklist p;
        p = L->next;    //p = *L;  修改
        while (p)
        {
            printf("%d ", p->date);
            p = p->next;
        }
    }
    int main()
    {
        linklist L;   //linklist* L; 修改
        createlist(L);
        sertlist(L);
        showlist(L);
        return 0;
    }
    
    

    img

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

报告相同问题?

问题事件

  • 系统已结题 9月5日
  • 已采纳回答 8月28日
  • 创建了问题 8月4日

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值