循环单链表的创建,遍历和销毁

版权声明:Sock的blog, 可以偷看但不可以偷走哦 https://blog.csdn.net/qq_42957923/article/details/84970670

循环单链表的简单操作

因为循环单链表和单链表的插入,删除等操作大同小异 ,因此我只总结了循环链表的创建,遍历以及销毁操作
循环链表的定义

//定义一个单链表
typedef struct LNode {
	int data;
	struct LNode* next;
}LNode, *LinkList;

虚幻链表的创建

//创建一个指定大小的循环链表
void CreateLoopList(LinkList* L, int n) {
	if (n < 1) {
		printf("输入有误\n");
		return;
	}
	printf("请输入 %d 个数据:", n);
	//创建头结点
	*L = (LinkList)malloc(sizeof(LNode));
	if (!(*L)) {
		exit(0);
	}
	LinkList rear = *L;
	LinkList p = NULL;
	for (int i = 0; i < n; ++i) {
		p = (LinkList)malloc(sizeof(LNode));
		if (!p) {
			exit(0);
		}
		scanf("%d", &p->data);
		rear->next = p;
		rear = p;
	}
	//尾指针连到头结点
	rear->next = *L;
}

循环链表的遍历

//遍历循环链表
void Traverse(LinkList L) {
	LinkList adjust = L->next;
	while (adjust != L) {
		printf("%d ", adjust->data);
		adjust = adjust->next;
	}
	printf("\n");
}

循环链表的销毁

//销毁循环链表
void Destroy(LinkList* L) {
	//将循环链表变成单链表
	LinkList adjust = (*L)->next;
	(*L)->next = NULL;
	*L = adjust;
	while (*L != NULL) {
		adjust = adjust->next;
		free(*L);
		*L = adjust;
	}
}

测试

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
//定义一个单链表
typedef struct LNode {
	int data;
	struct LNode* next;
}LNode, *LinkList;
//创建一个指定大小的循环链表
void CreateLoopList(LinkList* L, int n) {
	if (n < 1) {
		printf("输入有误\n");
		return;
	}
	printf("请输入 %d 个数据:", n);
	//创建头结点
	*L = (LinkList)malloc(sizeof(LNode));
	if (!(*L)) {
		exit(0);
	}
	LinkList rear = *L;
	LinkList p = NULL;
	for (int i = 0; i < n; ++i) {
		p = (LinkList)malloc(sizeof(LNode));
		if (!p) {
			exit(0);
		}
		scanf("%d", &p->data);
		rear->next = p;
		rear = p;
	}
	rear->next = *L;
}
//遍历循环链表
void Traverse(LinkList L) {
	LinkList adjust = L->next;
	while (adjust != L) {
		printf("%d ", adjust->data);
		adjust = adjust->next;
	}
	printf("\n");
}
//销毁循环链表
void Destroy(LinkList* L) {
	//将循环链表变成单链表
	LinkList adjust = (*L)->next;
	(*L)->next = NULL;
	*L = adjust;
	while (*L != NULL) {
		adjust = adjust->next;
		free(*L);
		*L = adjust;
	}
}
int main() {
	LinkList L1;
	CreateLoopList(&L1, 5);
	Traverse(L1);
	Destroy(&L1);
	if (!L1) {
		printf("OK\n");
	}
	system("pause");
	return 0;
}

欢迎大家的评论

猜你喜欢

转载自blog.csdn.net/qq_42957923/article/details/84970670
今日推荐