合并两个带尾指针的循环单链表

来源:互联网 发布:会议录音软件 编辑:程序博客网 时间: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;}

原创粉丝点击