#include <iostream>
struct Node
{
int value;
Node* pNext;
};
//尾插法
void InsertNode(Node* pHead, int value)
{
Node* pNewNode = new Node();
pNewNode->value = value;
Node* pTemp = pHead;
pNewNode->pNext = nullptr;
while(pTemp->pNext != nullptr)
{
pTemp = pTemp->pNext;
}
pTemp->pNext = pNewNode;
}
void PrintList(Node* pHead)
{
Node* pTemp = pHead;
while(pTemp != nullptr)
{
std::cout << pTemp->value << "\t";
pTemp = pTemp->pNext;
}
std::cout << std::endl;
}
//使用指针的引用,改变实参的指向
//遍历一次对链表进行翻转
void Reverse(Node*& pHead)
{
Node* pCurrent = pHead; //使用临时指针保存当前结点
Node* pLast = nullptr; //使用临时指针保存上一个结点
Node* pNext = nullptr; //使用临时指针保存下一个结点
//问题核心就是操作这三个临时指针指向以达到翻转链表的目的
while(pCurrent->pNext != nullptr)
{
pNext = pCurrent->pNext;
pCurrent->pNext = pLast;
pLast = pCurrent;
pCurrent = pNext;
}
pCurrent->pNext = pLast;
pHead = pCurrent;
}
int main()
{
Node* pHead = new Node(); //头结点
pHead->pNext = nullptr;
pHead->value = 0;
for(int i=1; i<10; i++)
{
InsertNode(pHead,i);
}
PrintList(pHead);
Reverse(pHead);
PrintList(pHead);
getchar();
}