c语言链表输出错误,求助!链表输出后第一位错误

已结贴√

问题点数:20 回复次数:4

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

求助!链表输出后第一位错误

2个集合排序

若用表La、Lb分别代表两个已存在的有序表,Lc为算法完成后产生新的有序表。可行的算法之一为:

从表La与Lb中各取一个元素进行比较,将小的元素插入到Lc中,并取小元素所在表的下一个元素继续与另一表的元素继续比较操作,直到一个表中元素取尽为止,再将另一表的余下元素直接挂入新表Lc的末尾。

//运行出来后面都对,就是第一位不知道怎么办。

#include

#include

#include

#include

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

#define MAXSIZE 50

#define LEN sizeof(struct LNode)

//Status 为函数的类型,其值是函数结果状态代码,如OK等

typedef int Status;

// ElemType为数据元素类型,根据实际情况而定,这里假设为int

typedef int ElemType;

struct LNode               /* 结点定义 */

{

ElemType data;

struct LNode *next;

};

typedef struct LNode *LinkList; /* 表的头指针类型 */

struct LNode *input();

int ListLength(LinkList L);

Status GetElem(LinkList L,int i,ElemType *e);//

Status ListEmpty(LinkList L);//

struct LNode *ListInsert(LinkList L,int n,ElemType e);

struct LNode *MergeList(LinkList La,LinkList Lb,LinkList Lc);

int main()

{

LinkList La=NULL,Lb=NULL;

LinkList p;

LinkList Lc=(struct LNode *)malloc(LEN);

Lc->next=NULL;

printf("请输入集合A(以0结尾):");

La = input();

printf("集合A的长度:%d\n",ListLength(La));

printf("请输入集合B(以0结尾):");

Lb = input();

printf("集合B的长度:%d\n",ListLength(Lb));

Lc=MergeList(La,Lb,Lc);

printf("\n最后的长度:%d\n",ListLength(Lc));

printf("结果为:");

while (Lc != NULL)

{

printf("%d ", Lc->data);

Lc = Lc->next;

}

return 0;

}

int ListLength(LinkList L)

{

int i=1;

LinkList p;

p=L->next;

while(p!=NULL)

{

p=p->next;

i++;

}

return i;

}

struct LNode *input()

{

struct LNode *head;

struct LNode *p1,*p2;

int i=0,j=0;

p1=p2=(struct LNode *)malloc(LEN);

scanf("%d",&p1->data);

head=NULL;

while(p1->data!=0)

{

i=i+1;

if(i==1)

{

head=p1;

}

else

{

p2->next=p1;

}

p2=p1;

p1=(struct LNode *)malloc(LEN);

scanf("%d",&p1->data);

}

p2->next=NULL;

return(head);

}

struct LNode *ListInsert(LinkList L,int n,ElemType e)

{

LinkList p1,p2,p;

p=(struct LNode *)malloc(sizeof(struct LNode));

p->data=e;

p1=L;

while(p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(p1->next==NULL)

{

p1->next=p;

p->next=NULL;

}

return L;

}

Status GetElem(LinkList L,int i,ElemType *e)

{ /* L为单链表的头指针。当第i个元素存在时,

其值赋给e并返回OK,否则返回ERROR */

int j=1; /* j为计数器 */

LinkList p=L; /* p指向第一个结点 */

while(p&&j

或p为空 */

{

p=p->next;

j++;

}

if(!p||j>i)   /* 第i个元素不存在 */

return ERROR;

*e=p->data;   /* 取第i个元素 */

return OK;

}

Status ListEmpty(LinkList L)

{ /* 初始条件:链式存储的表L已存在。*/

/*操作结果:若L为空表,则返回TRUE,否则返回FALSE */

if(L->next)

return FALSE;

else

return TRUE;

}

struct LNode *MergeList(LinkList La,LinkList Lb,LinkList Lc)

{ /* 已知表La和Lb中的数据元素按值非递减排列。 */

/* 归并La和Lb得到新的表Lc,Lc的数据元素也按值非递减排列 */

int i=1,j=1;

int k=0;

int La_len=ListLength(La);

int Lb_len=ListLength(Lb);

int ai,bj;

while(i<=La_len&&j<=Lb_len)          /* 表La和表Lb均非空 */

{

GetElem(La,i,&ai);

GetElem(Lb,j,&bj);

if(ai<=bj)

{

ListInsert(Lc,++k,ai);

++i;

}

else

{

ListInsert(Lc,++k,bj);

++j;

}

}

while(i<=La_len)                /* 表La非空且表Lb空 */

{

GetElem(La,i++,&ai);

ListInsert(Lc,++k,ai);

}

while(j<=Lb_len)                /* 表Lb非空且表La空 */

{

GetElem(Lb,j++,&bj);

ListInsert(Lc,++k,bj);

}

return Lc;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值