#include <iostream>
using namespace std;
//链表结点
struct Node{
int data;
struct Node *pNext;
};
//打印链表结点数据
void Print_List(struct Node *pHead)
{
struct Node *pNode = pHead;
while (pNode)
{
printf("%d, ", pNode->data);
pNode = pNode->pNext;
}
printf("\n");
}
struct Node* ReverseList(struct Node *pHead)
{
struct Node *pReverseHead = nullptr;
struct Node *pTmp = nullptr;
struct Node *pPrev = nullptr;
struct Node *pNode = pHead;
while (pNode)
{
if (pNode->pNext == nullptr)
pReverseHead = pNode;
pTmp = pNode->pNext;
pNode->pNext = pPrev;
pPrev = pNode;
pNode = pTmp;
}
return pReverseHead;
}
void main()
{
int nodeSize = 10;
struct Node *pHead = (struct Node*)malloc(nodeSize * sizeof(struct Node));
struct Node *pNode = pHead;
int len = nodeSize;
while (len--)
{
pNode->data = len + 1;
pNode->pNext = pNode + 1;
if (0 == len) pNode->pNext = nullptr;
pNode = pNode->pNext;
}
Print_List(pHead);
struct Node *pReverseHead = ReverseList(pHead);
Print_List(pReverseHead);
struct Node *pNodeNext = nullptr;
while (pHead)
{
pNodeNext = pHead->pNext;
free(pHead);
pHead = pNodeNext;
}
}