利用單向鍊錶 進行遞迴的實踐

2021-10-02 19:12:48 字數 2288 閱讀 2478

首先闡述一下什麼叫遞迴呢,就是方法不斷的自身呼叫,直至不滿足條件,跳出這個遞迴迴圈;舉個栗子:從前有座山,山里有座廟,廟裡有個小和尚、小和尚讓老和尚給他講故事,然後老和尚開始講故事:「從前有座山,山里有座廟,廟裡有個小和尚、小和尚讓老和尚給他講故事,然後老和尚開始講故事……」 這就是個遞迴,而且這是個死迴圈遞迴。

那正常的遞迴是什麼樣的呢,還是這個故事,稍作改動一下就可以了:從前有座山,山里有座廟,廟裡有個5歲的小和尚、小和尚讓老和尚給他講故事,然後老和尚開始講故事:「從前有座山,山里有座廟,廟裡有個4歲的小和尚、小和尚讓老和尚給他講故事,然後老和尚開始講故事……」 這個直至小和尚到1歲(因為0歲的小和尚還未出生),結束遞迴。

public

class

hannio

else

if(n==1)

else

}

首先總結規律,不管多少個箱子移動,只有兩種情況:第一種 只有乙個箱子,從第一根柱子直接移動到第三根柱子上。 第二種 有兩個箱子,先把第乙個箱子移動到中間的柱子,第二個箱子移動到第三根柱子上,最後第乙個箱子移動到第三根柱子上,完成任務。 那如果有很多箱子呢,比如有n個箱子呢,這個可以把n-1個箱子看成第乙個箱子,n是第二個箱子;這樣就很好移動了;先用遞迴方法讓n-1個箱子移動到第二根柱子上,然後第n個箱子移動到第三根柱子上。最後再用遞迴實現剩下的n-1個箱子從第二根柱子上移動到第三根柱子上。

通過上面例子,基本理解了遞迴的本質了,接下來用遞迴實現單向鍊錶,實現增、刪、查、顯示功能。

package com.zhengling.work;

//可以吧listdemo 理解為鍊錶類,初始化只有乙個head 節點,其值為null;

public

class

listdemo

//新增節點,如果當前節點的next為空,把節點增加到後面;如果不為空 使用遞迴,直至找到next為空的位置,加到此處。

public

void

add(entry entry)

else

}//列印節點中的值,如果當前節點的next不為空,遞迴列印 直至節點的next為空。

public

void

show()

}//查詢值 如果當前節點的值和查詢的值 相等 返回true

//如果當前節點沒有查詢到,當前節點next不為空 採用遞迴一直往下查詢

//如果遞迴查詢完了 還是沒找到 則返回false;

public

boolean

search

(int i)

else

else}}

//如果當前節點的下乙個節點 裡面有要刪除的值 進行判斷

//如果下乙個節點的下乙個節點 不為空 ,下乙個節點=下下乙個節點;

//下下乙個節點為空的話,自己讓下乙個節點=null;

public

void

delete

(int i)

else

}else}}

//初始化乙個起始節點。

entry head;

//如果起始節點為空,則把這個節點放到起始節點中。如果起始節點不為空 在head後面呼叫新增節點的方法;

public

void

addvalue

(int i)

else

}//如果起始節點不為空 就列印節點,起始節點為空了 代表鍊錶是空的 沒有列印的必要。

public

void

showvalue()

}//查詢:如果起始節點中的value 就等於查詢的值,返回true;

//否則 就判斷起始節點是否還有下乙個節點,如果有,就讓head呼叫查詢查詢此值的方法;

//如果沒有查詢到此值 就返回false;

public

boolean

searchvalue

(int i)

else

else}}

//首先判斷 這個鍊錶有沒有這個類,如果有再進行刪除操作

//如果起始節點中有這個值,然後起始節點有下乙個節點 讓起始節點的值等於其next,否則起始節點=null

//如果起始節點沒有這個值,讓起始節點呼叫查詢值的方法。

public

void

deletevalue

(int i)

else

}else}}

}//測試類

class

listdemotest

}

具體實現過程和思路已在**中 注釋。

使用遞迴進行鍊錶合併

leetcode上有合併鍊錶的題,大概是說將k個公升序鍊錶合成1個公升序鍊錶。附上原題 將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 definition for singly linke...

單向鍊錶的操作

1.單向鍊錶的建立 鍊錶建立後,其實,此時我們只可以知道head,而後通過head訪問每乙個節點成員。這是比較簡單的鍊錶,其中沒有其它的資訊了。如果需要建立有環的鍊錶,則將尾節點的next指標指向中間乙個節點即可。首先找到尾節點,而後將尾部節點的next指向中間乙個節點即可。如何判斷乙個鍊錶是否存在...

單向鍊錶的反轉

今天晚上閒著沒事幹,複習複習鍊錶反轉,因為自己不是學計算機專業的,所以基礎知識比較薄弱,總是會把看過的東西忘掉,所以要多複習,以便不時之需。單向鍊錶反轉其實很簡單,有兩種常規方式 1.迴圈遍歷完成反轉。這種方法比較簡單,就是用兩個指標,和乙個輔助指標,pre,cur ne 分別指向head,head...