這道題是在面試時遇到的,要求實現鍊錶反轉的遞迴版,這道題其實思想非常的簡單,而且幾行**就可以實現,但是在面試時出現,這的確如果之前練習的是非遞迴版的鍊錶反轉實現,那麼來乙個遞迴版的,可能需要花點時間來適應一下。
以下實現了兩個版本的遞迴版單鏈表反轉,這道題從兩個角度看,區別在於,遞迴呼叫的返回值是什麼,如果遞迴呼叫的返回值是輸入結點,那麼直接在這一層函式連線當前結點,另乙個是在下一層呼叫中完成鍊錶的反轉。
// 結點的定義
struct node
};class solution
node* reverse_list(node* node1, node* node2)
node* lastnode = null;
class solution
reverse_list(node->next)->next = node;
node->next = null;
}node* reverse_list(node* node)
reverse_list(node->next)->next = node;
return node;}
int main()
tmp->next = null;
s.reverselist(node);
for (int i = 0; i < 3; i++)
return 0;
}
遞迴實現鍊錶的反轉
我對遞迴的理解一直不是非常透徹,這裡想要用遞迴實現鍊錶的反轉,寫的時候發現自己連鍊錶的定義都忘記了 還是 寫得太少了 include stdio.h include include iostream using namespace std struct node node creat int a r...
Golang遞迴實現鍊錶反轉
反轉前的鍊錶 a b c d e f g h i j k l m n o p q r s t u v w x y z 反轉後的鍊錶 z y x w v u t s r q p o n m l k j i h g f e d c b a package main import fmt type lis...
鍊錶的反轉 遞迴實現
此處明確了實現的方法,另外非遞迴 迭代 的方法也可行。首先我們需要知道一些基礎知識 即遞迴的相關概念。遞迴 recursion 即函式自己呼叫自己,若問題可以使用遞迴來解決,則必須滿足以下三個條件 1.可以要把解決的乙個問題轉化為乙個新的問題,這個新問題的解決思路與原來相同,只是在有規律的變化 例如...