1. 前提
该单链表带有头节点,头节点中没有数据。
没有头节点更简单
2. 思想
思想:先将除了头节点外其他节点逆置,然后再加上头节点
3. 伪代码
开始时候:head->1->2->3->4->null
p1 p2 p3
结束时候:head->1->2<-3<-4 null
(while循环后) <- <- <-
p1 p2
4. 代码实现
//单链表结构
struct Node
{
int data;
Node *next;
};
//实现
Node *reverseSingleList(Node *node)
{
if (NULL == node)
{
cout << "error" << endl;//c 使用printf
return NULL;
}
//使用四个零时变量 head p1 p2 p3
Node *head = node;
Node *p1 = node->next;
Node *p2 = p1->next;
Node *p3 = NULL;
while (p2) //循环,直到链表尾部 NULL 为止
{
p3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = p3;
}
head->next->next = NULL; //第一个节点下个节点指向NULL
head->next = p1; //头节点指向翻转后的第一个节点
return head;
}