循环链表(判断双循环链表是否为对称,将两个单循环链表合并成一个循环链表)

一、判断带头节点的双循环链表是否为对称链表

思想:设置两个指针,一个从头开始,一个从后开始遍历,两个指针相等,或者其中一个指针的下一个节点为另外一个节点时结束遍历。如果数据相同,则往后遍历。否则不是对称链表。

代码:

bool symmetry(LinkList L){
	DNode *p=L->next,*q=p->prior;//两个移动指针 
	while(p!=q&&p->next!=q){//终止条件 
		if(p->data==q->data){//相等,则继续往后遍历 
			p=p->next;
			q=q->next;
		}else{//不是对称链表 
			return false;
		}
	} //是对称链表 
	return true;
}

时间复杂度O(n);空间复杂度O(1)

二、两个循环单链表,链表头指针分别指向h1和h2,编写一个函数将链表h2链接到链表h1之后,要求链接后的链表任保持循环链表形式。

思想:找到两个链表的尾指针,将第一个链表的尾指针与第二个链表的头指针链接起来,使其成为循环。

代码:

LinkList merge(LinkList &h1,LinkList h2){
	LNode *p,*q;
	p=h1;
	while(p->next!=h1){//找h1表尾 
		p=p->next;
	}
	q=h2;
	while(q->next!=h2){//找h2表尾 
		q=q->next;
	}
	p->next=h2;//将h2链接到h1之后 
	q->next=h1;//h2的尾节点指向h1 
	retuen h1;
} 

时间复杂度O(n);空间复杂度O(1)

相关推荐
蠢蠢的打码2 小时前
8584 循环队列的基本操作
数据结构·c++·算法·链表·图论
无问8174 小时前
数据结构-排序(冒泡,选择,插入,希尔,快排,归并,堆排)
java·数据结构·排序算法
Lenyiin4 小时前
《 C++ 修炼全景指南:十 》自平衡的艺术:深入了解 AVL 树的核心原理与实现
数据结构·c++·stl
slandarer5 小时前
MATLAB | R2024b更新了哪些好玩的东西?
java·数据结构·matlab
king_machine design5 小时前
matlab中如何进行强制类型转换
数据结构·算法·matlab
头发尚存的猿小二5 小时前
树——数据结构
数据结构·算法
紫钺-高山仰止6 小时前
【Matlab】matlab 结构体使用方法
数据结构·算法·matlab
shan_shmily6 小时前
算法知识点———并查集
数据结构·算法
终末圆7 小时前
MyBatis动态SQL中的`if`标签使用【后端 19】
java·数据结构·数据库·sql·算法·spring·mybatis
MogulNemenis7 小时前
力扣150题——位运算
数据结构·算法·leetcode