栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言循环链表(尾指针),含链表的头插,尾插,合并

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言循环链表(尾指针),含链表的头插,尾插,合并

C语言循环链表(尾指针),含链表的头插,尾插,合并

#include 
#include 
#include 

//带头节点的循环链表
typedef struct Lnode {
	struct Lnode* next;
	int data;
} Lnode, *linkList;

//循环链表的初始化
void initLink(linkList* tail) {
	 *tail = (linkList)malloc(sizeof(Lnode));		//创建一个头节点
	 (*tail)->data = NULL;
	 (*tail)->next = *tail;
}

//循环链表的插入(头插)
void insertLinkhHead(linkList* tail, int e) {
	Lnode* node = (Lnode*)malloc(sizeof(Lnode));
	node->data = e;
	if ((*tail)->next == (*tail))
	{
		//没有节点
		node->next = *tail;
		(*tail)->next = node;
		*tail = node;
	}
	else
	{
		//已经有了节点
		node->next = (*tail)->next->next;
		(*tail)->next->next = node;
	}
}

//循环链表的插入(尾插)
void insertLinkTail(linkList* tail, int e) {
	Lnode* node = (Lnode*)malloc(sizeof(Lnode));
	node->data = e;
	node->next = (*tail)->next;
	(*tail)->next = node;
	*tail = node;
}

//循环链表的遍历
void show(Lnode* tail) {
	if (tail->next == tail)
	{
		printf("链表中没有元素n");
	}
	else
	{
		Lnode* p = tail->next->next;
		int i = 0;
		while (p != tail->next)
		{
			printf("链表中的第%d个元素是%dn", i++, p->data);
			p = p->next;
		}
	}
}

//循环链表的合并
void merage(linkList* tail1, linkList* tail2) {
	linkList* p = (*tail1)->next;
	(*tail1)->next = (*tail2)->next->next;
	free((*tail2)->next);
	(*tail2)->next = p;
}

void main() {
	linkList tail;
	initLink(&tail);
	for (int i = 0; i < 5; i++)
	{
		insertLinkhHead(&tail, i);
	}

	show(tail);
	for (int i = 5; i < 10; i++)
	{
		insertLinkTail(&tail, i);
	}

	show(tail);
	printf("测试循环链表的合并n");

	linkList tail02;
	initLink(&tail02);
	for (int i = 20; i < 25; i++)
	{
		insertLinkhHead(&tail02, i);
	}
	show(tail02);
	printf("合并==start==n");
	merage(&tail, &tail02);
	show(tail02);
	printf("合并==end==n");
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026501.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号