我正試圖合并兩個排序的鏈表,但我的代碼無法運行。一個例子是:
List A: 1 -> 2 -> 4
List B: 1 -> 3 -> 4
答案: 1 -> 1 -> 2 -> 3 -> 4 -> 4
我現在很難看出代碼中的錯誤。誰能給我指出正確的方向?這是我的代碼:
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2){
//邊緣案例:
if ( l1==null && l2==null) return null;
else if (l1==null && l2! =null) return l2;
else if (l1!=null && l2==null) return l1;
while (l1.next != null) { //loop until end of list 2
///除錯。 System.out.println("LOOP ONE - l1 is:" l1.val " , l2 is:" l2.val);
//如果串列2中的值小于或等于串列1,則添加到串列1。
if ((l2.val < l1.next.val) || (l2.val == l1.val) ) {
//將l2的值添加到l1。
ListNode new_node = new ListNode(l2. val); // temp node存盤l2的資訊添加到l1而不修改l2。
new_node.next = l1.next;
l1.next = new_node;
l2 = l2.next; // advance list 2
// 除錯。 System.out.println("l1是:" l1.val ", l2是:" l2.val);
}
l1 = l1.next; // advance list 1
}
// 除錯。 System.out.println("在最后,l1是:" l1.val " 而l2是:" l2.val);
return l1;
}
}
uj5u.com熱心網友回復:
這里有一個方法,你可以得到你所尋找的結果:
import java.util.*;
class Main {
public static void main(String[] args){
LinkedList<Integer> first = new LinkedList<>()。
first.add(1)。
first.add(2);
first.add(4)。
LinkedList<Integer> second = new LinkedList<>()。
second.add(1)。
second.add(3)。
second.add(4)。
LinkedList<Integer> merge = mergeTwoLists(first,second);
for(int i = 0; i < merge.size(); i ){
System.out.print(merge.get(i) " "/span>)。
}
}
public static LinkedList<Integer> mergeTwoLists( LinkedList<Integer> first, LinkedList<Integer> second){
int index = 0;
for(int i = 0; i < second.size(); i ){
while(index < first.size() && first.get(index) < = second.get(i)){
index ;
}
first.add(index, second.get(i))。
}
return first;
}
}
該方法通過迭代第二個LinkedList,然后使用while回圈找到第一個索引,其中第一個LinkedList的值小于或等于第二個LinkedList的元素的值。
一旦找到這個索引,我們將該元素添加到第一個LinkedList中,然后繼續。
你可以改變這個方法,以適應你所尋找的特定風格,但這將產生這樣的結果:
你可以改變這個方法,以適應你所尋找的特定風格。
1 1 2 3 4 4
希望這對你有所幫助!
uj5u.com熱心網友回復:
你的代碼中有一些明顯的錯誤,比如最后回傳的節點實際上是一個尾部節點,而且一些邊界情況沒有被考慮。
你甚至沒有考慮那個ListNode L2頭部節點的值大于L1的情況。
此外,你的解決邏輯有些混亂,你應該嘗試其他的方法,比如遞回:
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null && l2 == null) {
return null;
}
if (l1 == null) {
return l2。
}
if (l2 == null) {
return l1;
}
if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2)。
return l1;
} else {
l2.next = mergeTwoLists(l2.next, l1);
return l2;
}
uj5u.com熱心網友回復:
試試這個
LinkedList<Integer> list1 = new LinkedList<>()。
list1.add(1)。
list1.add(2);
list1.add(4)。
LinkedList<Integer> list2 = new LinkedList<>()。
list2.add(1)。
list2.add(3)。
list2.add(4);
list1.addAll(list2)。
Collections.sort(list1)。
System.out.println(list1)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/316528.html
標籤:
上一篇:我可以停止大量的[Django]ERROR(EXTERNALIP)。無效的HTTP_HOST頭,我得到的是什么?
