合并两个带尾指针的循环单链表
来源:互联网 发布:会议录音软件 编辑:程序博客网 时间:2024/06/05 18:28
#include<iostream>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<<p->data<<"→";p = p->next;}std::cout<<p->data<<"→*\n"; //打印循环单链表的最后一个节点rb = CreateCLinkList(&L); //创建循环单链表L,并用rb作为尾指针p = L;while(p->next != rb->next){std::cout<<p->data<<"→";p = p->next;}std::cout<<p->data<<"→*\n"; //打印循环单链表的最后一个节点rc = Merge(ra, rb); //合并链表ra和ra,用rc作为新链表的尾指针p = rc->next;while(p->next != rc->next){std::cout<<p->data<<"→";p = p->next;}std::cout<<p->data<<"→*\n"; //打印循环单链表的最后一个节点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;}