题目描述:输入一个链表,反转链表后,输出新链表的表头。
分析:
完整代码:
/* 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; } };