数据结构,链表归并的一些问题是在==实在改不出来了

C语言 码拜 4年前 (2017-04-15) 334次浏览
#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
typedef struct Node
{
int data;
struct Node *next;
}*LinkList;
LinkList CreateList(LinkList head)   //初始化链表,头插法
{
LinkList p; int i, j, n;
j = 0;
printf(“请输入该线性表的长度”);
scanf_s(“%d”, &n);
head = (LinkList)malloc(sizeof(Node));
head->next = NULL;    //初始化头指针
for (i = n; i>0; i–)
{
p = (LinkList)malloc(sizeof(Node));
printf(“请输入元素第%d个元素”,j++);
scanf_s(“%d”, &p->data);
p->next = head->next;
head->next = p;
}
return head;
}
//void ShowList(LinkList head)
//{
// LinkList p;
// p= head->next;  //赋值问题
// if (p == NULL) printf(” error”);
// while (p!= NULL)
// {
// printf(“%3d”, p->data);
// p = p->next;     //这里有问题
// }
// printf(“\n\n”);
//}
void ShowList(LinkList l)
{
LinkList p;
p = l;
while (l != NULL)
{
printf(“%3d”, l->data);
p = p->next;
}
}
LinkList MergeList(LinkList L1, LinkList L2)
{
LinkList l3 = NULL;
LinkList pa, pb;
pa = L1->next;
pb = L2->next;
l3 = L1;
while (pa&&pb)
{
if (pa->data <= pb->data)
{
l3->next = pa; l3 = pa; pa = pa->next;
}
else { l3->next = pb; l3 = pb; pb = pb->next; }
}
l3->next = pa ? pa : pb;
free(L2);
return l3;
}
bool ListIsEmpty(LinkList H)
{
return H->next == NULL;
}
bool ListIsFull(LinkList H, int n)   //线性表能否满了
{
LinkList p; int j = 0;
p = H->next;
for (; p != NULL; p = p->next, j++);
if (j==n)
return  OK;
return ERROR;
}
void DelteList(LinkList h)
{
int a;
LinkList b;
b = h->next;
while (b -> next != NULL)
{
b = h->next;
a = b->next->data;
free(b);
}
}
void main()
{
Node p = { 0, NULL };
Node q = { 0, NULL };
LinkList la, lb, lc;
la = &p; lb = &q;
la=CreateList(la);
lb=CreateList(lb);
printf(“Now show you 线性表”);
ShowList(la);
ShowList(lb);
printf(“Now 合并起\n”);
lc = MergeList(la, lb);
printf(“合并后\n”);
ShowList(lc);
printf(“now 现在删除啦”);
printf(“完美撒花”);
getchar( );
}
解决方案

40

ShowList函数中应该是while (p != NULL)吧

40

1.ShowList有几处错误
2.你的MergeList函数逻辑也不对,你的l3是会不断往后移动的,你最后return回去的l3并不是你合并后的链表头部了,
本人再改改。

void ShowList(LinkList l)
{
	LinkList p;
	p = l->next;
	while (p != NULL)
	{
		printf("%3d", p->data);
		p = p->next;
	}
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明数据结构,链表归并的一些问题是在==实在改不出来了
喜欢 (0)
[1034331897@qq.com]
分享 (0)