一、题目描述

二、解题思路
整体思路
可以采用递归的方法来解决这个问题。
具体思路
函数实现的效果:reverseList函数用于将以head为头结点的链表反转,并返回新的头结点;
递归出口:如果链表为空,或者链表内只有一个元素,则无需反转,直接返回head
函数体:
(1)第一步,先将head之后的结点反转,用newhead指针接收新的头结点,反转之前的链表如图1所示,反转之后的链表如图2所示。


(2)**第二步,将head指向的结点接到反转后的链表的尾部,并将head结点的指针域置为空。**完成该步骤的链表如下图所示:

(3)返回newhead即可。
三、代码实现
cpp
/**
* 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||head->next==nullptr) return head;
auto newhead=reverseList(head->next);
head->next->next=head;
head->next=nullptr;
return newhead;
}
};