- 考虑翻转链表的递归实现
- 递归算法实现通常使用整体的思想,而不去人为的考虑具体的细节
- 例如本题实现的翻转链表函数,我们考虑该函数的本身的功能—
输入头结点,翻转该链表,并将新的头结点返回
- 因此该题具体实现如下
- 先考虑边界情况,当链表是空或者一个节点时,直接返回即可
- 当实现最后一步时,类似DP的考虑方式,调用
reverseList(head->next)
即可翻转以head->next
为开头的链表,并且得到他的头结点,如1->2->3->4->5
,调用完reverse函数即变成1->2<-3<-4<-5
并且得到新的头结点5,也就是我们最后需要的头结点,此时1->next指向2
只需要将1->next->next指向1,再让1指向空节点即可
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(!head || !head->next)return head;
auto newhead = reverseList (head->next);
head->next->next=head;
head->next=NULL;
return newhead;
}
};