感觉跟插入排序法的思想有些类似,假定前面都是排序好的。pNode就是当前拿在手中的准备插入的结点,除了注意改变当前结点连接之前要保存pNode后面一个结点的位置,不然找不到下一个结点的位置了。
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
ListNode* ReverseIteratively(ListNode* pHead)
{
ListNode* pReversedHead = NULL;
ListNode* pNode = pHead;
ListNode* pPrev = NULL;
while(pNode != NULL)
{
// 获得下一个结点,并把它保存在pNext
ListNode* pNext = pNode->m_pNext;
//如果下一个结点为NULL,当前节点就是原链表的尾结点,并且它是反转后链表的头结点
if(pNext == NULL)
pReversedHead = pNode;
// 反转结点之间的联系
pNode->m_pNext = pPrev;
// 在链表上前移
pPrev = pNode;
pNode = pNext;
}
return pReversedHead;