Leetcode刷题详解——反转链表

1. 题目链接:206. 反转链表

2. 题目描述:

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

Leetcode刷题详解——反转链表_第1张图片

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

Leetcode刷题详解——反转链表_第2张图片

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

**进阶:**链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

3. 解法(递归)

3.1 算法思路:

  1. 递归函数的含义:交给你一个链表的头指针,你帮我排序之后,返回逆序后的头结点
  2. 函数体:先把当前结点之后的链表逆序,逆序完之后,把当前结点添加到逆序后的链表后面即可
  3. 递归出口:当前结点为空或者当前只有一个结点的时候,不用逆序,直接返回

Leetcode刷题详解——反转链表_第3张图片

3.2 C++算法代码:

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        //当前结点为空或者只有一个结点直接返回
        if(head==nullptr||head->next==nullptr) return head;
        ListNode* newhead=reverseList(head->next);
        head->next->next=head;
        head->next=nullptr;
        return newhead;
    }
};

你可能感兴趣的:(leetcode,链表,算法)