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

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

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

代码:

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

相关推荐
Zsy_0510035 小时前
【数据结构】二叉树OJ
数据结构
程序员东岸6 小时前
《数据结构——排序(中)》选择与交换的艺术:从直接选择到堆排序的性能跃迁
数据结构·笔记·算法·leetcode·排序算法
牢七7 小时前
数据结构11111
数据结构
Ayanami_Reii7 小时前
进阶数据结构应用-一个简单的整数问题2(线段树解法)
数据结构·算法·线段树·延迟标记
CoderYanger10 小时前
C.滑动窗口-越短越合法/求最长/最大——2958. 最多 K 个重复元素的最长子数组
java·数据结构·算法·leetcode·哈希算法·1024程序员节
不会c嘎嘎11 小时前
【数据结构】AVL树详解:从原理到C++实现
数据结构·c++
say_fall11 小时前
C语言编程实战:每日一题:随机链表的复制
c语言·开发语言·链表
却话巴山夜雨时i11 小时前
394. 字符串解码【中等】
java·数据结构·算法·leetcode
惊鸿.Jh11 小时前
503. 下一个更大元素 II
数据结构·算法·leetcode
客梦11 小时前
数据结构-栈与队列
数据结构·笔记