鍊錶查重 遞迴實現

2021-10-25 18:08:54 字數 1196 閱讀 8567

最開始想到的遞迴方法,初步估計效率不會太高,但是**比較容易理解

思路

現在有乙個無序的鍊錶,在不清楚元素個數的情況下,無法常規的迭代實現查重(迭代也可以做,且效率較高),我首先想到是否可用遞迴實現。

遞迴的思路是:從表頭元素開始比較直到表尾結束,如果出現和表頭重複的元素就刪除,然後表頭後移一位,繼續遞迴;直到表空為止,返回查重後的鍊錶

待修改

效率肯定不會太高,因為裡面出現了多次重複查詢操作,後期可以考慮做乙個備忘錄來解決問題,目前暫時沒做

**

#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...