递归反转链表

输入一个链表,反转链表后,输出链表的所有元素。

链接:https://www.nowcoder.com/questionTerminal/75e878df47f24fdc9dc3e400ec6058ca
来源:牛客网

struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        //如果链表为空或者链表中只有一个元素
        if(pHead==NULL||pHead->next==NULL) return pHead;

        //先反转后面的链表,走到链表的末端结点
        ListNode* pReverseNode=ReverseList(pHead->next);

        //再将当前节点设置为后面节点的后续节点
        pHead->next->next=pHead;
        pHead->next=NULL;

        return pReverseNode;

    }
};

在用递归的时候,把递归函数当成一个黑盒子,不要老是想着递归里的具体实现,而是只是把递归函数当成一个普通的调用函数,对这个函数,你需要知道他的输入与输出。另外要设置好边界条件跳出。

比如最简单的n的阶乘的递归实现,代码如下。

function factorial (n) {
  if (n === 1) {
    return n;
  } else {
    return n * factorial(n-1);
  }
}

猜你喜欢

转载自blog.csdn.net/qq_16340693/article/details/79574753