leetcode题目连接:https://leetcode.cn/problems/reverse-linked-list/
题解过程:
1.找到重复的子问题
要逆序第一个节点,就把后面的节点都逆序一遍
2.关注到具体的子问题的实现
第一步:将当前节点的后面所有节点逆置
第二步:返回逆置后的头节点
具体如何实现逆置?
1.当前节点的下一个节点的next指向自己
2.将当前节点的next置空
3.递归的出口
head == nullptr || head->next == nullptr
代码:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
//1.递归的出口
if (head == nullptr || head->next == nullptr)
return head;
//2.关心具体的一个子问题做的事情
//2.1 让后面的逆置,并返回逆置后的头节点
ListNode* newHead = reverseList(head->next);
//2.2实现具体的逻辑,让自己的下一个节点的next指向自己
head->next->next = head;
//2.3断开连接
head->next = nullptr;
return newHead;
}
};