#include<iostream>
using namespace std;
typedef struct ListNode
{
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
} ListNode, *LinkList;
class Solution
{
public:
ListNode* ReverseList(ListNode* pHead)
{
ListNode *prev = NULL;
while (pHead != NULL)
{
ListNode *temp = pHead->next;
pHead->next = prev;
prev = pHead;
pHead = temp;
}
return prev;
}
void CreatList(LinkList &L, int n)
{
LinkList q, p;
// L=(LinkList)malloc(sizeof(ListNode));
L = new ListNode(NULL);
// L->next=NULL;//创建一个不带带头结点的单链表
p = L; //L为头结点
if (n>0) cin >> p->val;
int x;
for (int i = 0; i<n - 1; i++)
{
cin >> x;
q = new ListNode(x);
p->next = q;
p = q;
}
//p->next = NULL;
}
};
int main()
{
Solution so;
int n;
cin >> n;
ListNode* L;
so.CreatList(L, n);
ListNode* ans = so.ReverseList(L);
cout << endl;
while (ans)
{
cout << ans->val << endl;
ans = ans->next;
}
system("pause");
return 0;
}
链表翻转步骤:
假设pre之前已经翻转完成
将p.next指向pre完成当前节点的翻转;
将pre 和p后移