無意中看到一道題,如下:
現有兩個有序(公升序)的單向鍊錶,請編寫程式將這兩個鍊錶合併成乙個,並確保合併後的鍊錶也是公升序的
單向公升序鍊錶定義:
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...