遞迴法合併倆個單鏈表

2021-09-25 18:05:32 字數 1080 閱讀 4157

原題如下:

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。

我覺得解題思路用這一張圖就可以表達的很清楚了。

我的**(非遞迴的,遞迴的在下面)

/*

public class listnode

}*/public

class

solution

if(list2 == null)

listnode cur1 = list1;

//list1的前驅

listnode prev = null;

while

(list1 != null&&list2 != null)

if(list1 == null)

else

else}}

return cur1;

}}

然後看到有大佬用遞迴寫的,哇!猴賽雷啊。遞迴的思想很巧妙,而且**量很少啊。

以下是遞迴**

public listnode merge

(listnode list1,listnode list2)

if(list2 == null)

if(list1.val <= list2.val)

else

}

遞迴跳出的條件,當比較到最後時,某乙個鍊錶為空,那另乙個剩下的就可以直接「接」在之前已經比較好的那一串後面。

if

(list1 == null)

if(list2 == null)

接下來是遞迴

if

(list1.val <= list2.val)

else

這一些**先比較每乙個節點裡的值的大小,小的值接在(他的next和另乙個鍊錶的當前較大的值相比較,其中的較小的值的前邊)(這裡有點繞),直到某乙個鍊錶為空,返回。

倆單鏈表資料交叉合併

include typedef struct lnodelinklist 構造乙個單鏈表結構體 void createlist linklist l,int a,int n 後插法建立單鏈表 void display linklist l coutnext,p3 p1 p2分別指向倆表的第一節點 l...

資料結構之倆迴圈單鏈表合併

這段時間要好好調整一下自己了,發現基礎才是王道,所以打算好好鋪一鋪我滴c指標這一塊了,所以資料結構將會斷更一段時間,不過接下來要和大家見面的就是我們上次的迴圈單鏈表之合併 題目 將鍊錶a和鍊錶b合併為鍊錶c 演算法思想 將a鍊錶的尾指標reara與b鍊錶的第乙個節點鏈結起來,並且修改b鍊錶的尾指標r...

單鏈表(合併單鏈表)

單鏈表遍歷 單鏈表遍歷是從單鏈表頭指標head開始訪問,沿著next指標所指示的方向依次訪問每乙個結點,且每個結點只能訪問依次,直到最後乙個結點為止。遍歷時注意,不要改變head指標的指向。因此一般設定另外的乙個指標變數如p,p從head開始依次訪問乙個結點,直到鍊錶結束,此時p null,完成依次...