编辑代码

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

// 单链表结构体
typedef struct node {
    int data;
    struct node* next;
} Node, *LinkList;

// 创建单链表并初始化
LinkList createLinkedList() {
    Node *L, *s, *r;
    int x;

    // 创建头节点
    L = (LinkList)malloc(sizeof(Node));
    L->next = NULL;
    r = L;
    // 如果内存分配失败,则返回空指针
    if (L == NULL) {
        printf("无法分配内存.");
        return NULL;
    }

    printf("输入节点数据 (输入999结束): ");

    while (scanf("%d", &x) && x != 999) {
        s = (LinkList)malloc(sizeof(Node));

        if (s == NULL) {
            printf("无法分配内存.");
            return 0;
        }

        s->data = x;
        s->next = r->next;
        r->next = s;
        r = s;
    }

    return L;
}

// 打印链表
void printLinkedList(LinkList L) {
    Node* temp = L->next;

    while (temp != NULL) {
        printf("%d -> ", temp->data);
        temp = temp->next;
    }

    printf("NULL\n");
}

//按序号查找
int getElement(LinkList L,int i){
    if(i<1){
        printf("错误输入");
        return 0;
    }

    Node *p;
    p = L;
    for(int j=1;j<i;j++){
        p = p->next;
    }
    p = p->next;
    return p->data;
}

//在第i个节点前插入给定数值操作
void insert(LinkList L,int i,int x){
    Node *s, *r;
    int j;
    r = L;
    for(j=1;j<i;j++){
        printf("%d",j);
        r = r->next;
        if(r == NULL){
            printf("出错");
            break;
        }
    }
    s = (Node*)malloc(sizeof(Node));
    s->data = x;
    s->next = r->next;
    r->next = s;
}
// 主函数
int main() {
    LinkList L;
    int i,x;
    L = createLinkedList();

    printf("创建的链表为: ");
    printLinkedList(L);
    printf("想插入的序号: ");
    scanf("%d",&i);
    printf("想插入的数值: ");
    scanf("%d",&x);
    insert(L,i,x);
    printf("修改后的链表为: ");
    printLinkedList(L);


    return 0;
}