有两个循环单链表,头指针分别是head1和head2,实现算法将链表head2连接到head1之后,连接后的链表仍然是循环链表的形式

来源:互联网 发布:网络作家跳舞 编辑:程序博客网 时间:2024/05/18 03:02

头文件:函数的声明

#include <stdio.h>#include <stdlib.h>#include <malloc.h>typedef int ElemType;typedef struct Node {ElemType data;struct Node* next;}ListNode,*LinkList;LinkList CreateCycList(int n);//创建循环单链表void DisplayCycList(LinkList head);LinkList Link(LinkList head1,LinkList head2);


函数的定义

#include "循环链表.h"LinkList CreateCycList(int n){ListNode *p,*q;LinkList head = NULL;ElemType e;int i = 1;q = NULL;while(i <= n){printf("请输入第%d个元素:",i);scanf("%d",&e);if(i == 1){head=(LinkList)malloc(sizeof(ListNode));head->data = e;head->next = NULL;q = head;//第一个结点q始终指向最后一个结点}else{p = (LinkList)malloc(sizeof(ListNode));p->data = e;p->next = NULL ;q->next = p;q = p;//q始终指向最后一个结点}i++;}if(q != NULL){q->next = head;//将最后一个结点的指针指向头结点指针,形成循环链表}return head;}void DisplayCycList(LinkList head){ListNode *p;p = head;if(p == NULL){printf("该链表是空表");return;}while(p->next != head){printf("%4d",p->data );p = p->next ;}printf("%4d\n",p->data);}LinkList Link(LinkList head1,LinkList head2){ListNode *p,*q;p = head1;q = head2;while(p->next != head1){p = p->next ;}while(q->next != head2){q = q->next ;}p->next = head2;q->next = head1;return head1;}


函数的应用

#include "循环链表.h"int main(void){LinkList h1,h2;int n;printf("创建一个单链表h1:\n");printf("请输入元素个数:");scanf("%d",&n);h1 = CreateCycList(n);printf("创建一个单链表h2:\n");printf("请输入元素个数:");scanf("%d",&n);h2 = CreateCycList(n);printf("输出循环单链表h1:\n");DisplayCycList(h1);printf("输出循环单链表h2:\n");DisplayCycList(h2);h1 = Link(h1,h2);printf("输出连接后的循环单链表h1+h2:\n");DisplayCycList(h1);return 0;}


0 0