单链表如何逆置

方法一:借助辅助结点

cpp 复制代码
void Reverse1(Node* plist) {
	//0.最少两个节点才逆置、
	if (Get_length(plist) < 2) return;
	//1.申请两个指针p和q,p初始化指向第一个有效节点,q初始化指向第二个有效结点
	Node* p = plist->next;
	Node* q = p->next;
	//2.将辅助结点的next置为NULL
	plist->next = NULL;
	//3.进入while循环,循环条件是p指向的节点得存在
	while (p != NULL) {
		q = p->next;
		//4.将p指向节点头插到plist链表里
		p->next = plist->next;
		plist->next = p;
		//5.再让p同步到q的位置
		p = q;
	}
}

方法二:不借助辅助节点

cpp 复制代码
void Reverse2(Node* plist){
	//0.最少两个节点才逆置
	if (Get_length(plist) < 2) return;
	//1.申请3个指针p和q和r,p初始化指向第一个有效节点,q初始化指向第二个有效结点,r初始化NULL
	Node* p = plist->next;
	Node* q = p->next;
	Node* r = NULL;
	p->next = NULL;
	//2.进入while循环,循环条件是q指向的节点得存在
	while(q!=NULL)
	{
		//3.通过三个指针p q r相互配合,将p和q之间的箭头逆置
		r = q->next;
		q->next = p;
		p = q;
		q = r;
		
	}
	//4.当while循环结束,说明3个指针pqr此时已经将所有指针逆置,辅助结点的next保存此时p的地址
	plist->next = p;
}
相关推荐
Msshu1232 小时前
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
动词ing5 小时前
【学习笔记】数据结构栈与队列(栈先进后出+队列先进先出+括号匹配+消消乐模型)
数据结构·笔记·学习
a187927218316 小时前
【算法】链表(二):链表上的双指针——变速、异链与定距,和一份路程账本
数据结构·算法·leetcode·链表·go·指针·环形链表
zcmodeltech7 小时前
火电厂模型能演示冷态启动和故障处理吗?——基于STM32与Modbus RTU的集控实训控制系统设计
数据结构·stm32·单片机·嵌入式硬件·能源
Doubbbbbbble云7 小时前
区间合并问题的常见算法模式与优化思路4
java·数据结构·算法
David猪大卫7 小时前
【C++修炼】哈希表的实现
数据结构·c++·笔记·学习·算法·哈希算法·散列表
linx2959 小时前
单元九 · 零基础路线图-第 7–9 周·类与 RAII
c语言·开发语言·数据结构·c++·嵌入式硬件·算法
布莱克6059 小时前
C++ 七大排序算法详解:选择、冒泡、插入、计数、堆、快速与归并排序
数据结构·c++·算法·排序算法
科学实验家11 小时前
最小生成树:Prim,kruskal
数据结构·c++·算法
小孩玩什么11 小时前
深入理解字符串匹配算法:BF算法,KMP算法
java·c语言·开发语言·数据结构·c++·算法