#include
typedef struct Node //结点类型定义
{
char data;
struct Node *next;
}Node, *LinkList; //LinkList为结构指针类型
LinkList CreateCLinkList(LinkList *);
LinkList Merge(LinkList, LinkList);
int main()
{
LinkList L, ra, rb, rc, p;
ra = CreateCLinkList(&L); //创建循环单链表L,并用ra作为尾指针
p = L;
while(p->next != ra->next)
{
std::cout<data<
p = p->next;
}
std::cout<data<
rb = CreateCLinkList(&L); //创建循环单链表L,并用rb作为尾指针
p = L;
while(p->next != rb->next)
{
std::cout<data<
p = p->next;
}
std::cout<data<
rc = Merge(ra, rb); //合并链表ra和ra,用rc作为新链表的尾指针
p = rc->next;
while(p->next != rc->next)
{
std::cout<data<
p = p->next;
}
std::cout<data<
return 0;
}
/*创建循环单链表,返回尾指针,该链表既有头指针也有尾指针*/
LinkList CreateCLinkList(LinkList *L)
{
LinkList s;
char ch = ' ';
*L= new Node;
(*L)->next = (*L); //初始化头结点时指向自己
(*L)->data = '*';
std::cout<
std::cin>>ch;
while(ch != '#')
{
s = new Node;
s->data = ch;
s->next = (*L)->next;
(*L)->next = s;
std::cin>>ch;
}
s = *L;
while(s->next != *L) //当s->next = *L时,s就是尾指针
s = s->next;
return s; //返回尾指针
}
/*合并两个带尾指针的循环单链表*/
LinkList Merge(LinkList ra, LinkList rb)
{
LinkList p, q;
p = ra->next;
ra->next = rb->next->next; //链表ra的尾指针指向rb的第一个节点
q = rb->next; //q保存链表rb的头结点,用于释放
rb->next = p; //链表rb的尾指针指向ra的头结点
delete q; //释放掉链表rb的头结点
return rb;
}