数据结构二:单循环链表

本文介绍了单循环链表的结构,包括节点定义、初始化、头尾插入、删除节点以及打印节点的方法。特别强调了循环链表与普通单链表的区别和while循环的使用技巧。
摘要由CSDN通过智能技术生成

一 定义

单循环链表是一种特殊的链表形式,尾部节点的指针域指向首个节点而不是空,以形成循环。

二 结构

datanext

三 源码


#include <iostream>

typedef struct Node {

	int data;
	Node* next;

};


Node* initNode() {

	Node* node = new Node();
	if (!node) {
		return node;
	}

	node->data = 0;
	node->next = node;
	return node;
}

bool headInsert(Node* head, int value) {
	Node* node = new Node();
	if (!node) {
		return false;
	}
	node->data = value;
	node->next = head->next;

	head->next = node;
	head->data++;
	return true;
}

bool tailInsert(Node* head, int value) {
	Node* node = new Node();
	if (!node) {
		return false;
	}
	node->data = value;
	node->next = head;

	Node* currentNode = head->next;

	/// while输出的结果是currentNode->next == head
	while (currentNode->next != head)
	{
		// 內部还是对current的处理
		currentNode = currentNode->next;
	}

	currentNode->next = node;

	head->data++;
	return true;
}

void deleteNode(Node* head, int value) {

	Node* preNode = head->next;
	Node* currentNode = preNode->next;
	while (currentNode->next != head)
	{
		if (currentNode->data == value) {
			preNode->next = currentNode->next;
			head->data--;
			delete currentNode;
			break;
		}
		preNode = currentNode;
		currentNode = currentNode->next;
	}
}


void printNode(Node* head) {
	Node* current = head->next;
	/// while输出的结果是currentNode == head
	while (current != head)
	{
		printf("%d ", current->data);
		current = current->next;
	}
	printf("\n");
}

int main()
{

	Node* node = initNode();
	printNode(node);
	headInsert(node, 1);
	headInsert(node, 2);
	headInsert(node, 3);
	headInsert(node, 4);
	tailInsert(node, 5);
	deleteNode(node, 2);
	printNode(node);

	std::cout << "Node Count:" << node->data;
}

四 总结

1 其和普通单链表的差异在于尾部节点的判断

2 循环链表不存在指针域指向为null的问题

3 while的迭代结果是()中条件的反,把next想象成++更容易理解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值