单链表反转原理及实现

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;
}

 

猜你喜欢

转载自blog.csdn.net/kpengk/article/details/103616838
今日推荐