看了很多都不全面,这里贴一个自己测试的完整例子,亲测有效
#include <iostream>
using namespace std;
struct ListNode
{
int value;
ListNode * next;
};
ListNode * reverse(ListNode * list)
{
if(list == NULL)
{
return NULL;
}
ListNode* pReversedHead = NULL;
ListNode* pNode = list;
ListNode* pPrev = NULL;
while(pNode != NULL)
{
// get the next node, and save it at pNext
ListNode* pNext = pNode->next;
// if the next node is null, the currect is the end of original
// list, and it's the head of the reversed list
if(pNext == NULL)
{
pReversedHead = pNode;
}
// reverse the linkage between nodes
pNode->next = pPrev;
// move forward on the the list
pPrev = pNode;
pNode = pNext;
}
return pReversedHead;
}
int main()
{
ListNode * p0 = new ListNode;
p0->value = 1;
//p0->next = NULL;
ListNode * p1 = new ListNode;
p1->value = 2;
p0->next = p1;
//p1->next = NULL;
ListNode * p2 = new ListNode;
p2->value = 3;
p1->next = p2;
ListNode * p3 = new ListNode;
p3->value = 4;
p2->next = p3;
p3->next = NULL;
ListNode * local = p0;
while(local!=NULL)
{
cout << local->value << endl;
local = local->next;
}
//链表反转
ListNode * p4 = reverse(p0);
cout << "--------" << endl;
while(p4!=NULL)
{
cout << p4->value << endl;
p4 = p4->next;
}
return 0;
}