题目:输入一个链表,反转链表后,输出链表的所有元素。
思路:需要定义三个节点,当前节点pNode,前一节点pPre,和后一节点pNext。要将当前节点的下一节点pNode->next用下一节点储存起来,避免在反转时发生链表断裂。然后将当前节点指向前一节点,然后将当前节点的指针移到下一节点,前一节点和下一节点同时移动。
要注意:
- 如果只有一个节点,直接返回当前节点
- 判断输入的链表是否为空
- 注意防止反转后链表出现断裂
- 返回的反转之后的头结点不是原始链表的尾结点
class Solution {
public:
ListNode* ReverseList(ListNode* pHead)
{
ListNode* newhead=NULL; // 反转后的头指针
ListNode* pNode=pHead;
ListNode* pPre=NULL;
while(pNode!=NULL)
{
ListNode* pNext=pNode->next;
if(pNext==NULL )
newhead=pNode;
pNode->next=pPre;
pPre=pNode;
pNode=pNext;
}
return newhead;
}
};