单链表如何逆置

方法一:借助辅助结点

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;
}
相关推荐
小飞学编程...7 小时前
【哈希表】
数据结构·哈希算法·散列表
重生之后端学习10 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展
动词ing11 小时前
【C语言】结构体+文件基础
c语言·开发语言·数据结构
晚风醉蝶13 小时前
1-11-奇偶排序-OddEvenSort
java·数据结构·算法
旖旎夜光13 小时前
LeetCode 852:山脉数组的峰顶索引(二分查找) —— 题解
数据结构·c++·算法·leetcode·二分查找
小雪崩15 小时前
嵌入式学习 day25:哈希表及排序与查找
linux·c语言·数据结构·学习·排序算法
冻柠檬飞冰走茶18 小时前
《数据结构实验指导-C++语言版》 求单链表list中的元素个数,即表长
开发语言·数据结构·c++·算法·list
_Narcissus_18 小时前
动态规划初探(含完整代码实现)
c语言·数据结构·c++·算法·动态规划·背包问题·最短路径
_Narcissus_20 小时前
枚举和模拟算法笔记
c语言·数据结构·c++·笔记·算法·模拟·枚举
冻柠檬飞冰走茶20 小时前
《数据结构实验指导-C++语言版》 在顺序表 list 中查找元素 x
开发语言·数据结构·c++·算法·list