單鏈表的遞迴實現

2021-07-24 21:51:43 字數 2031 閱讀 2428

可以將單鏈表看成是遞迴定義的,每個結點的next域指向由後諸結點組成的一條子單鏈表,最後乙個結點的next域指向空鍊錶。此時可以將單鏈表寫成遞迴演算法。

1、構造空鍊錶

public

class linkedrecursion}

2、根據陣列構造單鏈表

//根據指定陣列構造鍊錶

public

linkedrecursion(t element)

}private nodecreate(t element, int i)

return p;

}

執行過程如下:這裡假設陣列長度為3。

遞迴的過程相當於從最後乙個結點開始一次往前推進,每次遞迴返回結果在下一次遞迴時使用,所以我們從i=3,開始看起。

i=3,此時返回值為結點p,且p=null;

i=2, create(element,2+1)函式返回結點null

此時 p.next=create(element,2+1);

i=1,create(element,1+1)函式返回結點2

此時 p.next=create(element,1+1);

i=0, create(element,0+1)函式返回結點1

此時 p.next=create(element,0+1);

所以this.head.next=create(element,0);建立了乙個鍊錶。

3.鍊錶的深拷貝(從鍊錶構造單鏈表)

//根據單鏈表構造單鏈表 深拷貝

public

linkedrecursion(linkedrecursionlist)

private nodecopy(nodep)

return q;

}

執行過程:

假設list長度為3

i=3時,copy函式返回的q結點是null;

i=2時,q=new node(p.data,null);

q.next=copy(p.next);導致

i=1時,q=new node(p.data,null);

q.next=copy(p.next);導致

i=0時,,q=new node(p.data,null);

q.next=copy(p.next);導致

所以當遞迴結束後,拷貝了整個鍊錶。

4、判斷是否相等

public

boolean

equals(object obj)

return

false;

}private

boolean

equals(nodep, nodeq)

5、列印整個鍊錶

public string tostring()

private string tostring(nodep)

return str+this.tostring(p.next);

}

單鏈表的遞迴與非遞迴實現

一 遞迴版本 1 class linklist 2 9 10 private linknode head 11 12 public void add int data 13 17 18 else 19 22 23 24 public void add linknode node,int data 2...

單鏈表遞迴

以前覺得遞迴太麻煩,指標方便多了,於是乎單鏈表的題目都是用迭代呀,雙指標呀來做的。這次突破下自己,將單鏈表的遞迴掰扯一下,等下會用乙個簡單的小題目來作為例子 我先講一下平常遞迴的流程,方便待會單鏈表遞迴的理解 題目 輸入乙個數字 n 123,列印出1,2,3 void print n 執行流程圖 鍊...

單鏈表反轉 非遞迴 遞迴方式實現

鍊錶的翻轉是程式設計師面試中出現頻度最高的問題之一,常見的解決方法分為遞迴和迭代兩種。最近在複習的時候,發現網上的資料都只告訴了怎麼做,但是根本沒有好好介紹兩種方法的實現過程與原理。所以我覺得有必要好好的整理一篇博文,來幫忙大家一步步理解其中的實現細節。我們知道迭代是從前往後依次處理,直到迴圈到鏈尾...