单链表如何逆置

方法一:借助辅助结点

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;
}
相关推荐
nice_lcj5201 小时前
LRU 缓存入门:它是什么、怎么用、面试怎么手写
java·数据结构·缓存·面试·lru
꧁细听勿语情꧂2 小时前
直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序
c语言·开发语言·数据结构·算法
Pniubi14 小时前
关于算法用现成数据结构和手撕
数据结构
老师我太想进步了20261 天前
【数据结构-6】算法美学之单链表(1)
数据结构·算法
希望我万事顺遂1 天前
力扣hot100-滑动窗口最大值
数据结构·算法·leetcode
꧁细听勿语情꧂1 天前
二叉树余题,排序、直接插入排序、希尔排序
c语言·开发语言·数据结构·算法
是main不是漫1 天前
【双指针|LeetCode1089 复写零】巧用逆向思路,破解原地覆盖陷阱
数据结构·算法·leetcode
饮水桶_T2 天前
JAVA IO流笔记
开发语言·数据结构·算法
wo_jack2 天前
C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?
数据结构·c++·面试·stl·list
zaizai10072 天前
算法(左程云)1
数据结构