请教数据结构C语言版,第二章线性表中,关于循环链表合并算法的问题。在VC++6.0下编译时,运算结果错误。

2025-01-08 06:37:57
推荐回答(1个)
回答1:

#include
#include
#include

typedef char ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*LinkList;

void IniList(LinkList *L) /*初始化*/
{
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL;
}

void Create_cLinkList(LinkList L) /*尾插法建立链表*/
{
Node *s;
char c;
int flag=1;
while(flag)
{
fflush(stdin);
c=getchar();
if(c!='$')
{
s=(Node *)malloc(sizeof(Node));
s->data=c;
s->next=L->next;
L->next=s;
}
else
flag=0;
}
}

void merge_2(LinkList RA,LinkList RB) /*循环单链表的合并算法(二),采用两个尾指针的循环链表连接起来*/
{
/* Node *p;
p=RA->next;
RA->next=RB->next->next;//不知道为什么你总是next->next的,这一段也没怎么看懂
free(RB->next);
RB->next=p;
return RB;*/
Node * p=RA->next;
p=RA->next;
/* while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
p=RA->next;*/
while(p->next!=NULL)
{
p=p->next;
}
p->next=RB->next;
// free(RB->next);
p=RA->next;
/* while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}*/
}

void main()
{
LinkList la,lb;
Node *p;
IniList(&la);
IniList(&lb);

printf("输入循环单链表A数据:");
Create_cLinkList(la);
p=la->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");

printf("输入循环单链表B数据:");
Create_cLinkList(lb);
p=lb->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");

// lc=merge_2(la,lb); lc是个啥呀?没看到
merge_2(la,lb);
printf("合并后的循环链表为:\n");
p=la->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}