题目
输入一个链表,反转链表后,输出新链表的表头。
分析
辅助指针:定义三个用于翻转链表的辅助指针和一个用于表示翻转链表头结点的指针,node指向当前节点、left指向当前节点的前一个节点、right指向当前节点的下一个节点、ReverseHead指向翻转链表的头结点。
翻转链表过程:循环翻转链表,每次循环翻转一个结点。判断node是否是最后一个结点,如果是最后一个节点,则reverseHead指向node(确定翻转链表表头节点),然后node指向left(翻转链表),退出循环;如果不是最后一个节点,则node指向left(翻转链表),移动left和node指针。
代码
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode*pNode=pHead;
ListNode*left=nullptr;
ListNode*right=nullptr;
ListNode*ReverseHead=nullptr;
while(pNode!=nullptr)
{
right=pNode->next;
if(right==nullptr)
ReverseHead=pNode;
pNode->next=left;
left=pNode;
pNode=right;
}
return ReverseHead;
}
};
看大佬文章,自己缓存下,消化。。。