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