我是靠谱客的博主 大方蓝天,最近开发中收集的这篇文章主要介绍有两个循环单链表,头指针分别是head1和head2,实现算法将链表head2连接到head1之后,连接后的链表仍然是循环链表的形式,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
头文件:函数的声明
#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("%4dn",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;
}
最后
以上就是大方蓝天为你收集整理的有两个循环单链表,头指针分别是head1和head2,实现算法将链表head2连接到head1之后,连接后的链表仍然是循环链表的形式的全部内容,希望文章能够帮你解决有两个循环单链表,头指针分别是head1和head2,实现算法将链表head2连接到head1之后,连接后的链表仍然是循环链表的形式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复