本博客为本文刷题笔记,方便日后复习。
刷题平台:牛客网
题目描述
输入一个链表,反转链表后,输出新链表的表头。
题目分析
本题目在考研时候,也是一道经常练习到的题目。要将链表翻转,需要定义三个指针。如下借用牛客网上的图解说明。图中有作者的具体ID。
其中使用 pre记录当前节点的前一个节点,初始为NULL。使用next记录当前节点的后一个节点,初始也为NULL。
当前节点不为NULL的时候,可以进行指针反转。具体反转过程如图所示。
设当前节点用cur表示,则cur=pHaed;
- next = cur-next;
- cur->next = pre;
- pre = cur;
- cur = next;
代码分析
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode *pre = nullptr;//指向当前节点的前一个节点,初始为空
ListNode *cur = pHead;//当前节点
ListNode *next = nullptr;//当前节点的后一个节点,初始为空
while(cur){//当cur不为空,进入循环
next = cur->next;//指向当前节点的下一个节点
cur->next = pre;//指针反转
pre=cur;//更新,往右走
cur=next;//更新,往右走
}
return pre;//返回当前的链表头
}
};
本文详细解析了链表反转的算法实现,通过定义三个指针(pre、cur、next),逐步反转链表节点的指向,最终返回新的链表头。文章包含清晰的代码示例和流程说明,适合初学者及考研复习。

113

被折叠的 条评论
为什么被折叠?



