第15题 反转链表
题目描述
输入一个链表,反转链表后,输出新链表的表头。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if(pHead==nullptr || pHead->next == nullptr) return pHead;
auto cur = pHead;
auto nex = pHead->next;
ListNode* pre = nullptr;
while(cur){
nex = cur->next;
cur->next = pre;
pre = cur;
cur = nex;
}
return pre;
}
};
思路:
每次记录当前节点cur(初始为head)和前值节点pre(初始为nullptr),从头结点开始,每次循环,若cur不为空,nex保存cur的子节点,因为pre是已经反转的链表节点的头节点,将cur的next指向pre,当前处理完毕,将pre赋值为当前节点cur,cur移动到下一个节点处。(注意应先进行nex = cur->next;,防止cur赋值为nex后为空nex指向空指针的next)


该篇博客详细介绍了如何实现链表的反转操作,通过迭代方式,每次记录当前节点和前一个节点,逐步更新节点的next指针,直至完成整个链表的反转。这种方法避免了空指针异常,确保了链表反转的正确性。
174

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



