单链表如何逆置

方法一:借助辅助结点

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;
}
相关推荐
十二4 小时前
【洛谷题解】P1115 最大子段和(前缀和 + 维护最小前缀)
数据结构·c++·算法·蓝桥杯
2501_933923254 小时前
双指针算法:移动零+复写零(Java)
数据结构·算法·双指针
suhan7 小时前
【数据结构】六、图:4.图的遍历(深度优先算法DFS、广度优先算法BFS)
数据结构·算法·排序算法
suhan7 小时前
【数据结构】六、图:3.十字链表、邻接多重表、边集数组
数据结构·算法·排序算法
kiracrimson8 小时前
STL简单引入:把数据结构做成模板
开发语言·数据结构·c++
HPtiger8 小时前
交换类排序详解:冒泡排序与快速排序
数据结构·算法·排序算法
kyle~8 小时前
数据结构 --- 无锁队列(Lock-Free Queue)
linux·数据结构·c++·多线程·并发
Cccp.1239 小时前
【leetcode】(十四)从暴力递归到动态规划
数据结构·算法·leetcode·动态规划
凤凰院凶涛QAQ19 小时前
《Java版数据结构 & 集合类剖析》Map & Set & 反射:“从哈希碰撞到红黑树转换,反射帮你扒开 HashMap 的桶数组看个究竟”
java·数据结构·算法
H.莓飛19 小时前
【数据结构】排序_OJ题(一):计数、桶与排序后的处理
java·开发语言·数据结构