Java實現兩個有序的單項鍊表的合併

2021-08-24 18:22:33 字數 2551 閱讀 7092

無意中看到一道題,如下:

現有兩個有序(公升序)的單向鍊錶,請編寫程式將這兩個鍊錶合併成乙個,並確保合併後的鍊錶也是公升序的

單向公升序鍊錶定義:

public class listnode

}請在下面的**框架基礎上編寫:

public class solution …}

/**

*

* 現有兩個有序(公升序)的單向鍊錶,請編寫程式將這兩個鍊錶合併成乙個,並確保合併後的鍊錶也是公升序的

* @author henry

* @createdate 2016-10-27

*/

public class listnodetest

}

}

/**

* 單向公升序鍊錶定義:

* @author henry

* @createdate 2016-10-27

*/

class listnode

}

/**

* 將單項鍊表進行排序

*

* @author henry

* @createdate 2016-10-27

*/

class solution

/**

* 一開始的時候想寫while,但是發現無法獲得頭結點,並且定義變數較為複雜。

* 回頭一想,認為遞迴可以直接實現佇列的排序。所以又重新編寫一下邏輯。

* 這樣編寫節約記憶體,提公升效率。

*

* @param result null

* @param l1 單項鍊表1 頭項

* @param l2 單項鍊表2 頭項

* @return 返回頭結點

*/

public listnode getresult(listnode result, listnode l1, listnode l2)

if (l1 == null)

if (l2 == null)

if (l1.val > l2.val) else

result.next = getresult(result.next, l1, l2);

return result;

}

}

時隔快一年啦,今天看到hashmap的原始碼時,想起還有這個沒有寫。今天寫一下,把它補齊,用while的寫法實現。自己好以後做參考。

/**

* while 將單項鍊表進行排序

* 如果l1或l2為空,則返回單邊。

* @author henry

* @date 2017-7-10

* @param l1

* @param l2

* @return

*/

public listnode mergetwolists2(listnode l1, listnode l2)

listnode head = l1.val < l2.val ? l1 : l2;

listnode other = l1.val >= l2.val ? l1 : l2;

listnode prevhead = head;

listnode prevother = other;

while (prevhead != null)

if(prevhead.next==null)

prevhead=prevhead.next;

}

return head;

}

演算法 尋找兩個單項鍊表的交點

問題 尋找兩個單項鍊表的交點。輸入 兩個帶空頭結點的單向鍊錶 輸出 如果有相交的節點,輸出節點值 如果沒有,列印 沒有找到相交節點 好吧回頭看了一下好像這個方法是錯的。這題原理很簡單,首先是遍歷兩個鍊錶,獲取它們的長度 然後求出它們的長度差 difference 讓長的乙個鍊錶先前進differen...

合併兩個有序單鏈表 Java

準備兩個鍊錶l1和l2 判斷是否有鍊錶為空 如果l1為空,則不用比較直接返回l2,如果l1為空,則直接返回l2 比較l1和l2節點,選出最小的那個節點,將該節點設為合併後的鍊錶的head 頭 節點,同時將指向該節點的l1或l2後移,方便接下來的比較 設定乙個變數temp指向head節點,用於之後連線...

C語言單項鍊表的實現

include include typedef int typedata define node length sizeof node 定義鍊錶的結構體 typedef struct tagnode node 函式宣告 node createlist typedata tdindata int fo...