#include<stdio.h> #include<stdlib.h> #define MAXSIZE 20 typedef int datatype; typedef struct link{ datatype info; struct link *next; }link_node; void *init(link_node L) { return NULL; } void input(link_node L,link_node *head)//注意这里是否需要将“L”设置为*L { int j=1; int i; link_node *p; p=head; printf("请输入链表中的元素个数:"); scanf("%d",&i); printf("请输入链表中的元素:\n"); for(j=1;j<=i;j++) { scanf("%d",&p->info); p=p->next; } } void display(link_node L,link_node *head)// { link_node *p=head; if(!p) { printf("单链表不存在!\n"); } else { printf("单链表中的元素为:"); while(p) { printf("%d",p->info); p=p->next; } } } link_node *insert(link_node L,datatype x,link_node *head,link_node i) { link_node *p,*q,*pre; pre=NULL; q=head; if(!q) { printf("单链表中找不到该结点\n"); } else{ while(q&&q->info!=x) { pre=q; q=q->next; } } if(q) { if(!pre) { p->next=q; p=head; } else { p->next=q; pre->next=p; } } } int main() { int i,x; link_node L,*head,*p,*q; init(L); input(L,head); display(L,head); printf("请输入要在第%d个结点前插入:",i); printf("请输入要插入的值%d",x); insert(L,x,head,i); display(L,head); return 0; }
时间: 2024-01-04 18:04:57 浏览: 39
这段代码存在一些问题,需要进行修改:
1. `init()` 函数应该返回一个 `link_node*` 类型的指针,而不是 `void*` 类型的指针。
2. 在 `input()` 函数中,需要将 `L` 设置为 `*head`,因为传入函数的是指针类型的 `head`,而不是结构体类型的 `L`。同时,在输入元素时需要将指针 `p` 指向下一个节点,否则会一直向同一个节点输入数据。
3. `insert()` 函数中,需要先创建一个新的节点 `p`,并将要插入的值 `x` 赋给 `p->info`。同时,应该根据输入的位置 `i` 来确定插入的位置,而不是只考虑到要插入的值 `x`。在找到要插入的位置后,将 `p` 插入到链表中。
下面是修改后的代码:
阅读全文