需要记录三个节点:当前节点,当前节点的前一个节点,当前节点的后一个节点。 测试时注意空链表和链表中只有一个节点的情况。
#include<iostream>
using namespace std;
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};
ListNode* ReverseListNode(ListNode* pHead)
{
ListNode* pReverseHead = nullptr;
ListNode* pNode = pHead;
ListNode* pPrev = nullptr;
while (pNode != nullptr)
{
ListNode* pNext = pNode->m_pNext;
if (pNext == nullptr)
pReverseHead = pNode;
pNode->m_pNext = pPrev;
pPrev = pNode;
pNode = pNext;
}
return pReverseHead;
}
int main()
{
ListNode* head = new ListNode();
head->m_nValue = 1;
head->m_pNext = nullptr;
ListNode* a = new ListNode();
a->m_nValue = 2;
a->m_pNext = nullptr;
head->m_pNext = a;
ListNode* b = new ListNode();
b->m_nValue = 3;
b->m_pNext = nullptr;
a->m_pNext = b;
ListNode* c = new ListNode();
c->m_nValue = 4;
c->m_pNext = nullptr;
b->m_pNext = c;
ListNode* d = new ListNode();
d->m_nValue = 5;
d->m_pNext = nullptr;
c->m_pNext = d;
ListNode* e = new ListNode();
e->m_nValue = 6;
e->m_pNext = nullptr;
d->m_pNext = e;
ListNode* iter = head;
while (iter != nullptr)
{
cout << iter->m_nValue << " ";
iter = iter->m_pNext;
}
cout << endl;
ListNode* pReverseHead = ReverseListNode(head);
iter = pReverseHead;
while (iter != nullptr)
{
cout << iter->m_nValue << " ";
iter = iter->m_pNext;
}
cin.get();
return 0;
}