1. 程式人生 > >遞迴反轉連結串列

遞迴反轉連結串列

輸入一個連結串列,反轉連結串列後,輸出連結串列的所有元素。

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);
  }
}