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

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

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

代码:

复制代码
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)

相关推荐
平平无奇。。。1 小时前
解密完全二叉树顺序存储之堆结构
c语言·数据结构·visual studio
ゞ 正在缓冲99%…2 小时前
leetcode142.环形链表II
数据结构·链表
岑梓铭2 小时前
《考研408数据结构》第一章复习笔记
数据结构·笔记·考研·408
lifallen2 小时前
Hadoop MapOutputBuffer:Map高性能核心揭秘
java·大数据·数据结构·hadoop·算法·apache
散1123 小时前
01数据结构-B树练习及B+树特点
数据结构·b树
书院门前细致的苹果4 小时前
MySQL 中的 B+树和 B树的区别详解
数据结构·数据库·mysql
半桔4 小时前
【STL源码剖析】二叉世界的平衡:从BST 到 AVL-tree 和 RB-tree 的插入逻辑
java·数据结构·c++·算法·set·map
塔中妖5 小时前
【华为OD】分割数组的最大差值
数据结构·算法·华为od
凯子坚持 c6 小时前
Redis 核心数据结构:String 类型深度解析与 C++ 实战
数据结构·c++·redis
songx_996 小时前
leetcode29( 有效的括号)
java·数据结构·算法·leetcode