题目描述
输入一个链表,反转链表后,输出新链表的表头。
个人思路:定义一个新节点为反转后的链表表头 p R e v e r s e H e a d pReverseHead pReverseHead,一个节点为当前遍历的节点 p N o d e pNode pNode,另一个节点为反转链表的指向前驱 p P r e v pPrev pPrev;然后遍历该链表,当当前节点 p N o d e pNode pNode的下一节点为空时,则说明当前节点为反转链表的头;如不为空,则前驱 p P r e v pPrev pPrev为当前节点的 n e x t next next,将当前节点作为下一节点的前驱,下一节点作为当前节点继续遍历
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
//反转链表表头
ListNode* pReverseHead = nullptr;
//遍历当前节点
ListNode* pNode = pHead;
//反转链表的指向前驱
ListNode* pPrev = nullptr;
while (pNode != nullptr) {
ListNode* pNext = pNode->next;
//下一节点为空,则当前节点即为反转链表的头
if (pNext == nullptr)
pReverseHead = pNode;
//令当前节点的下一节点为前一节点,即前驱
pNode->next = pPrev;
//当前节点作为下一节点的前驱
pPrev = pNode;
//下一节点作为当前节点
pNode = pNext;
}
return pReverseHead;
}
};