一、题目表述
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后的链表头节点。链表节点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
二、代码实现
ListNode* ReverseList(ListNode* pHead)
{
ListNode* pReverseHead=NULL;
ListNode* pNode=pHead;
ListNode* pPrev=NULL;
while(pNode!=NULL)
{
ListNode* pNext=pNode->m_pNext;
if(pNext==NULL)
pReverseHead=pNode;
pNode->m_pNext=pPrev;
pRrev=pNode;
pNode=pNext;
}
return pReverseHead;
}
这里涉及大量的指针操作,应特别注意三个问题:
- 针对输入头节点为空指针或者链表只有一个节点是做出相应处理;
- 反转后的链表不能出现断裂;
- 反转后的头节点保证是原始链表的尾节点。