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

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

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

代码:

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

相关推荐
青岛少儿编程-王老师7 小时前
CCF编程能力等级认证GESP—C++7级—20250927
数据结构·c++·算法
nanaki502139 小时前
数据结构(3) ----------- 栈、队列
数据结构
一只小透明啊啊啊啊9 小时前
b树,b+树,红黑树
数据结构·b树·b+树
Mingze03149 小时前
C语言四大排序算法实战
c语言·数据结构·学习·算法·排序算法
程序员东岸10 小时前
学完顺序表后,用 C 语言写了一个通讯录
数据结构·笔记·学习
独自破碎E11 小时前
Leetcode2166-设计位集
java·数据结构·算法
Cikiss11 小时前
LeetCode160.相交链表【最通俗易懂版双指针】
java·数据结构·算法·链表
2301_7890156212 小时前
算法与数据结构——排序算法大全
c语言·开发语言·数据结构·c++·算法·排序算法·visual studio
无限进步_13 小时前
冒泡排序的多种实现方式详解
c语言·数据结构·c++·算法
new coder14 小时前
[算法练习]Day 7: 变长滑动窗口
数据结构·算法·leetcode