最開始想到的遞迴方法,初步估計效率不會太高,但是**比較容易理解
思路
現在有乙個無序的鍊錶,在不清楚元素個數的情況下,無法常規的迭代實現查重(迭代也可以做,且效率較高),我首先想到是否可用遞迴實現。
遞迴的思路是:從表頭元素開始比較直到表尾結束,如果出現和表頭重複的元素就刪除,然後表頭後移一位,繼續遞迴;直到表空為止,返回查重後的鍊錶
待修改
效率肯定不會太高,因為裡面出現了多次重複查詢操作,後期可以考慮做乙個備忘錄來解決問題,目前暫時沒做
**
#include
#include
using
namespace std;
typedef
int elemtype;
typedef
struct lnodelnode,
*linklist;
bool
createlist
(linklist *l,
int len)
;void
showlist
(linklist l)
;linklist recursedelete
(linklist l)
;int
main()
bool
createlist
(linklist *l,
int len)
return
true;}
void
showlist
(linklist l)
cout << endl;
}linklist recursedelete
(linklist l)
if(l)
recursedelete
(l->next)
;//表頭指向下乙個,再次遞迴遍歷
}}
note
因為這個程式寫的比較急,所以在建表的時候直接是使用者輸入長度建的表,這樣就是知道了表長(遞迴的時候並沒有用到表長),但是題中要求是未知長度;很多地方很簡略,也有很多地方值得多次推敲,有時間會推敲這個程式,使其變得盡量完美
一位不甘墮落的大學生
旋轉鍊錶,遞迴實現
思路 將原鍊錶看成兩部分,乙個部分表示完成旋轉的 乙個部分表示未完成旋轉的。分別通過兩個指標deshead和reshead指向兩個鍊錶,在一次函式遞迴中需要完成的是將未完旋轉鍊錶的頭指標 p 中的next指標指向已完成旋轉佇列的頭結點q.並將p新增到已完成佇列,從未完成佇列中移除p,該錶q當前的指向...
遞迴實現鍊錶的反轉
我對遞迴的理解一直不是非常透徹,這裡想要用遞迴實現鍊錶的反轉,寫的時候發現自己連鍊錶的定義都忘記了 還是 寫得太少了 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...