e555666ee 2023-03-31 22:26 采纳率: 37.5%
浏览 31

关于#c语言#的问题,如何解决?

谁方便帮我看一下程序吗?卡住了,【问题描述】设单链表Va中的数据元素递增有序。试编写程序,将数据X插入单链表Va,要求插入后保持该表的有序性。

【输入形式】
【输出形式】
【样例输入】

              8 

              25 28  36  78  96  102  980  1000

               88

【样例输出】25 28 36 78 88 96 102 980 1000

#include <iostream>
#include <stdlib.h>
#include <malloc.h>
using namespace std;
typedef struct LNode

{

    int data;

    struct LNode *next;    

}LNode,*LinkList;
void InitList_L(Node *LinkList)
{
    LinkList=(Node *)malloc( sizeof(Node));
    (LinkList)->next=NULL;
}
void CreatList(Node *LinkList){
     Node *r=LinkList,*s;
     int a;
     while(scanf("%d",&a)){
          if(a!=0){
               s=(Node *)malloc(sizeof(Node));
               s->value=a;
               r->next=s;
               r=s;    
          }
          else{    
               r->next=NULL;
               break;    
          }
     }
}
void ListInsert_L(LinkList &L, int i, int x){
    LNode *p = GetElem(L,i-1);
    LNode *s = (LNode *)malloc(sizeof(LNode));
    s->data = x;
    s->next = p->next;
    p->next = s;
}
void DisplayList_L(LinkList &L)

    LinkList p;
    p=L->next;
    while(p)
    {
        cout<<p->data<<' ';
        p=p->next;
    }
int main()

{

    int a;LinkList L,x;

    InitList_L(L);   

    CreatList(L);  

    cin>>X;       

    ListInsert_L(L,X,i);    

    DisplayList_L(L);     


    return OK;

}

```

  • 写回答

2条回答 默认 最新

  • test_boy001 2023-04-01 05:26
    关注

    有几处问题需要注意:

    函数 InitList_L 的参数类型应该是 LinkList &,表示传递的是指向指针的引用,否则函数内部的修改不会影响到传入的参数。

    函数 CreatList 中应该使用 LinkList 类型来定义 r 和 s,并且在创建 LinkList 时应该设置其头结点,否则头结点指针未被初始化,可能指向随机地址,导致程序出错。

    函数 ListInsert_L 中应该使用 LinkList 类型来定义 p,并且在找到插入位置的结点时,应该判断 p 是否为空,如果为空则无法插入,应该报错或者忽略插入。

    函数 DisplayList_L 的参数类型应该是 LinkList 而不是 LinkList &,因为该函数不需要修改链表。

    在 main 函数中,应该将输入的数据插入链表中,并且需要指定插入的位置,可以通过遍历链表找到第一个大于等于插入元素的结点,然后将元素插入该结点之前即可。

    下面是修改后的代码:

    Copy code
    #include <iostream>
    #include <stdlib.h>
    #include <malloc.h>
    using namespace std;
    
    typedef struct LNode {
        int data;
        struct LNode *next;
    } LNode, *LinkList;
    
    void InitList_L(LinkList &L) {
        L = (LinkList)malloc(sizeof(LNode));
        L->next = NULL;
    }
    
    void CreatList(LinkList &L) {
        LNode *r = L, *s;
        int a;
        while (scanf("%d", &a)) {
            if (a != 0) {
                s = (LNode *)malloc(sizeof(LNode));
                s->data = a;
                r->next = s;
                r = s;
            } else {
                r->next = NULL;
                break;
            }
        }
    }
    
    void ListInsert_L(LinkList &L, int x) {
        LNode *p = L, *s;
        while (p->next && p->next->data < x) {
            p = p->next;
        }
        s = (LNode *)malloc(sizeof(LNode));
        s->data = x;
        s->next = p->next;
        p->next = s;
    }
    
    void DisplayList_L(LinkList L) {
        LNode *p;
        p = L->next;
        while (p) {
            cout << p->data << ' ';
            p = p->next;
        }
    }
    
    int main() {
        int x;
        LinkList L;
        InitList_L(L);
        CreatList(L);
        cin >> x;
        ListInsert_L(L, x);
        DisplayList_L(L);
        return 0;
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 3月31日

悬赏问题

  • ¥15 使用docker安装chemex后无法启动
  • ¥15 关于#vue.js#的问题:word excel和ppt预览问题语言-javascript)
  • ¥15 Apache显示系统错误3该如何解决?
  • ¥30 uniapp小程序苹果手机加载gif图片不显示动效?
  • ¥20 js怎么实现跨域问题
  • ¥15 C++dll二次开发,C#调用
  • ¥15 请教,如何使用C#加载本地摄像头进行逐帧推流
  • ¥15 Python easyocr无法顺利执行,如何解决?
  • ¥15 为什么会突然npm err!啊
  • ¥15 java服务连接es读取列表数据,服务连接本地es获取数据时的速度很快,但是换成远端的es就会非常慢,这是为什么呢