输入一个链表,反转链表后,输出链表的所有元素。
链接: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);
}
}