题目:
思路:
对反转过程进行模拟:
如示例1:对于节点1,需要结点2的next指向节点 1,而节点2的next指针之前指向节点3,又该如何处理?需要节点3指向节点2!依次递推,最终需要节点5指向节点4,节点4指向节点3……
上述过程是一个自底而上的递归过程!
对于自底而上的递归,模板为:向孩子要答案,然后经过操作后返回给父亲节点。
对于这道题:1.对于每个节点,向孩子节点要什么?或者说最底层能给我们什么?自然是最后一个节点,让最后一个节点作为反转后的新的头节点。
2.向孩子要答案后,如何进行递归操作?我们只要了头节点,自然需要进行反转链表的操作,即让孩子节点指向自己,让自己指向空节点。
3.返回给父亲节点什么?综合1,2,返回给父亲节点的则是:以当前节点为尾节点的反转后的链表头节点。
代码如下:
class Solution { public: ListNode* reverseList(ListNode* head) { if(!head) return NULL; if(!head->next) return head; ListNode* reverseHead=reverseList(head->next); head->next->next=head; head->next=NULL; return reverseHead; } };