单链表如何逆置

方法一:借助辅助结点

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 分钟前
LeetCode:207课程表
java·数据结构·算法·leetcode·职场和发展
z200509304 小时前
今日算法(回溯子集)(模版题)
数据结构·算法·leetcode
QiLinkOS5 小时前
【用呼吸重构创造价值关系——QiLink生态】
c语言·数据结构·c++·人工智能·单片机·嵌入式硬件·算法
晚风予卿云月5 小时前
【前缀和】一维前缀和 & 二维前缀和
数据结构·c++·算法
YL200404266 小时前
071字符串解码
数据结构·leetcode
变量未定义~6 小时前
单点修改、区间求和(模板)、区间修改,单点查询(模板)
数据结构·算法
LinHenrY12277 小时前
数据结构(二叉树)
数据结构
炸薯条!7 小时前
树--二叉树--堆
数据结构
z200509308 小时前
今日算法(回溯子集)
数据结构·算法·leetcode
Hesionberger8 小时前
巧用异或找出唯一数字(多解)
java·数据结构·python·算法·leetcode