所以我有一個java程式來添加兩個數字,兩個數字都由2個不同的鏈表表示,每個節點存盤一個數字。
我正在嘗試撰寫一個遞回解決方案,其中兩個鏈表的總和位于第一個鏈表中并回傳。
示例:鏈表 1= 125
鏈表 2=149
鏈表 3 應包含 274(125 149)。
我的程式在這里:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
addnums(l1,l2);
Display(l1);
return l1;
}
public static void addnums(ListNode l1, ListNode l2) // actual work is done here
{
if(l1!=null && l2!=null)
{
l1.val =l2.val;
if(l1.val>=10)
l1=carryfwd(l1);
addnums(l1.next,l2.next);
}
else if(l1==null && l2!=null)
{
// l1.val=l2.val;
l1=new ListNode(l2.val);
System.out.println("initialized with " l1.val);
addnums(l1.next,l2.next);
}
}
public static void Display(ListNode l)
{
while(l!=null)
{
if(l.next==null)
System.out.println(l.val " ");
else
System.out.print(l.val " ");
l=l.next;
}
}
public static ListNode carryfwd(ListNode l) // to carryover to the next node
{
l.val%=10;
if(l.next!=null)
{l.next.val =1;
if(l.next.val>=10)
carryfwd(l.next);
}
else
l.next=new ListNode(1);
return l;
}
}
此代碼不適用于
L1={0}
L2={7,3}
, addTwoNumbers 方法回傳的 L1 僅為 {7}。
即使我在 addnums 方法的 else 部分中將 3 附加到 L1。
請幫助我了解我的 3 節點在哪里丟失。
您可以直接在以下位置運行此代碼:https : //leetcode.com/problems/add-two-numbers/
uj5u.com熱心網友回復:
主要問題是當else塊啟動時,會l1被分配一個新值。呼叫者不會看到這種變化,因為它l1是區域變數。因此,在那之后發生的一切,都發生在與原始l1.
更深層次的問題是,當它得到的只是一個值時,addnums函式不能希望將新節點附加到第一個串列中null。
這就是為什么最好堅持addTwoNumbers函式的原始簽名,它回傳結果串列。在這種情況下,當第一個引數恰好是 時沒有問題null:我們仍然可以創建新節點并回傳它。
另一個說明是:當兩個串列節點之一是null您可以回傳另一個。在這種情況下,無需再發生任何事情。
所以這是一個更正,保留你在if塊中的代碼,這很好:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
// If one of the arguments is null, return the other
if (l1 == null) return l2;
if (l2 == null) return l1;
// Your original logic:
l1.val = l2.val;
if (l1.val >= 10)
l1 = carryfwd(l1);
l1.next = addTwoNumbers(l1.next, l2.next);
return l1;
}
請注意,您可以通過用迭代替換遞回來獲得一些速度,并保留在下一次迭代中再次添加的進位變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/405887.html
標籤:
