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

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

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

              8 

              25 28  36  78  96  102  980  1000

               88

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

#include 
#include 
#include 
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<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;

}

```

有几处问题需要注意:

函数 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;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^