原題如下:
輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。
我覺得解題思路用這一張圖就可以表達的很清楚了。
我的**(非遞迴的,遞迴的在下面)
/*
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,完成依次...