遞迴反轉連結串列
阿新 • • 發佈:2019-01-29
輸入一個連結串列,反轉連結串列後,輸出連結串列的所有元素。
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);
}
}