单链表反转原理及实现

本文介绍了单链表的节点定义,并详细讲解了使用迭代法进行链表反转的思路与过程,包括如何遍历链表并改变节点的next指针,最终达到链表反转的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 节点定义

单链表节点的数据结构定义如下:

/* 定义结节点 */
typedef struct _Node
{
	int value;
	Node* next;
}Node;

2 方法:迭代法

2.1 思路

遍历整个链表,并把当前节点的next指向上一节点。

2.2 分析

1.初始链表状态如下图所示。

2.定义节点指针

①定义前向节点指针,并初始化为head。Node* prev = head;

②定义当前节点指针,并指向head的下一节点。Node* cur = head->next;

3.取其中一个节点进行分析,假如当前状态如下图所示:

①将当前节点的next(即下一节点地址)赋值给临时指针,此时临时指针指向下一节点;

 ②将前向节点的指针prev赋值给当前节点指针的next,即当前节点的下一节点指向了前向节点;

③将当前节点的指针cur赋值给前向节点指针prev。将临时指针temp赋值给当前指针cur。前向节点和当前节点都向前进了一步,指针移到到各自的下一节点;

4.循环执行第3步的过程,直到当前节点的next为NULL为止,此时的前向指针prev即为反转后链表的收地址。反转完成后的链表如下图所示:

 3 代码实现

/* 单链表反转 */
Node* reverseList(Node* head)
{
	Node* prev = head;
	Node* cur = head->next;
	head->next = NULL;
	while (cur != NULL)
	{
		Node* temp = cur->next;//记录当前节点的下一个节点
		cur->next = prev;//当前节点指向前向节点
		//指针后移
		prev = cur;
		cur = temp;
	}
	return prev;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值