目录
1. 题目链接:
2. 思路分析:
思路一:从宏观上看
让当前节点后面的链表先逆置,并且把头节点返回
让当前节点添加到逆置后的链表后面即可
思路二:将链表看成一颗树
做一次后序遍历,找到叶子节点,
返回一层,让这个节点的next节点的next指向这一层的节点,让这一层的节点的next指向nullptr
3. 代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if (head == nullptr || nullptr == head->next)
return head;
ListNode *newhead = reverseList(head->next);
head->next->next = head;
head->next = nullptr;
return newhead;
}
};