题目描述:输入一个链表,反转链表后,输出新链表的表头。
分析:
完整代码:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
//检查输入的合法性
if(pHead == nullptr)
return nullptr;
/*******创建三个指针*******/
//创建链表反转后的头节点指针
ListNode* ReverseHead = nullptr;
//创建链表当前节点指针
ListNode* pNode = pHead;
//创建链表当前节点前一个节点指针
ListNode* preNode = nullptr;
//判断当前节点是否存在
while(pNode != nullptr)
{
//创建当前节点的下一个节点指针
ListNode* pNext = pNode->next;
//判断下一个节点是否存在
if(pNext == nullptr)
ReverseHead = pNode; //如果下一节点不存在,则此节点就是反转链表的头节点(因为此节点就是末尾的节点)
/*******如果下一个节点存在******/
//反转链表
pNode->next = preNode;
//当前节点和下一个节点都需要往后退
preNode = pNode;
pNode = pNext;
}
//返回反转链表的头节点
return ReverseHead;
}
};