怎么连续调用创建多个单链表
如下代码,怎么能连续调用ListInser这个函数,以创建多个链表,卡了一个多小时了,就是没办法解决,求大佬指点
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef int Status;
//链表的初始化
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//建立一个空链表
Status LinkListInit(LinkList &L){
L=(LinkList)malloc(sizeof(LNode)); //申请结点
if(!L)return -1;
L->next=NULL;
return 1;
}
//尾插法,插入单链表元素
Status ListInsert(LinkList &L,int i,ElemType e){
ElemType x;
LNode *p,*s;
L->next=NULL;
p=L; //开始时,使得p指向头结点
while(scanf("%d\n",&x)==1){
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
p->next=s;
s->next=NULL;
p=s;
}
return 1;
}
//查找链表中的第i个元素
/*Status GetElem(LinkList L,int i,ElemType &e){
LNode *p;
int j;
p=L->next;
//if(i<1||i>L.length)return -1;
for(j=0;j<i;j++){
p=p->next;
}
if(!p||j>i) return -1;
e=p->data;
return 1;
}*/
int main(){
int i;
ElemType e;
LinkList La,p;
LinkList Lb,q;
LinkListInit(La);
LinkListInit(Lb);
printf("请输入要插入的单链表La的数据:");
ListInsert(La,i,e);
printf("La:");
for(p=La->next;p!=NULL;p=p->next){
printf("%d ",p->data); }
printf("\n");
printf("请输入要插入的单链表Lb的数据:");
ListInsert(Lb,i,e);
printf("Lb:");
for(q=Lb->next;q!=NULL;q=q->next){
printf("%d ",q->data); }
printf("\n");
}
ListInsert参数La传入的是链表的头节点。而你的头节点是用LinkListInit来初始化的。
这么一来你先用循环来初始化多个头节点。再调用ListInsert把头节点传进去。这不就行了。 ba21 发表于 2021-4-13 20:46
ListInsert参数La传入的是链表的头节点。而你的头节点是用LinkListInit来初始化的。
这么一来你先用循环来 ...
但是我调用了两次ListInsert,这样的话,不应该是创建了两个头结点吗? 2896513469 发表于 2021-4-13 21:01
但是我调用了两次ListInsert,这样的话,不应该是创建了两个头结点吗?
那你LinkListInit这个是用来干嘛的? ba21 发表于 2021-4-13 21:18
那你LinkListInit这个是用来干嘛的?
我不是也调用了两次LinkList吗,按说不应该是创建了两个空链表La和Lb吗
2896513469 发表于 2021-4-14 15:30
我不是也调用了两次LinkList吗,按说不应该是创建了两个空链表La和Lb吗
ba21 发表于 2021-4-14 18:07
老哥,我换了个方法,解决了。我上面发的没法输入LB了,是不是因为没有清楚键盘缓冲区呀
页:
[1]