问题很简单,程序如下:
#include <iostream>
#include <cassert>
using namespace std;
struct LinkNode
{
int data;
LinkNode *next;
};
// 反转函数,head指针指向链表头结点
void Reverse(LinkNode **head)
{
assert(head!=NULL);
if (*head == NULL)
{
return ;
}
LinkNode *preNode = NULL; // 前一节点
LinkNode *currNode = *head; // 当前节点
LinkNode *nextNode = NULL; // 下一节点
while (currNode != NULL)
{
// 保存当前节点的 next 节点
nextNode = currNode->next;
// 将当前节点的 next 指针指向前一个节点
currNode->next = preNode;
// 将 preNode 和 currNode 均向后移动
preNode = currNode;
currNode = nextNode;
}
// 重置 head 指针
*head = preNode;
}
void main()
{
// 初始化链表
LinkNode *head = new LinkNode;
head->data = 1;
LinkNode *second = new LinkNode;
second->data = 2;
head->next = second;
LinkNode *tail = new LinkNode;
tail->data = 3;
second->next = tail;
tail->next = NULL;
// 将链表反转
Reverse(&head);
// 打印反转后的链表内容
for (LinkNode *p = head; p != NULL; p=p->next)
{
cout<<p->data<<" ";
}
cout<<endl;
}
执行结果如下: