我正在嘗試編寫一個整數的函數,每個整數都由一個鏈表來表示,其中每個節點 - >數據都是數字0-9。最不重要的數字在列表的頭部,最多的是在尾部。總結兩個鏈接列表,其中每個節點是一個數字
這是來自Cracking the Coding Interview的書。這裏是我的代碼:
SinglyLinked<int>& addLists(SinglyLinked<int>& ll1, SinglyLinked<int>& ll2)
{
SinglyLinked<int> *sumList = new SinglyLinked<int>;
ListNode<int> *node1 = ll1.head; ListNode<int> *node2 = ll2.head;
int sum, carry = 0;
while(node1 || node2)
{
if(node1)
sum += node1->data;
if(node2)
sum += node2->data;
sum += carry;
carry = 0;
sumList->insertAtEnd(sum%10);
if(sum > 9)
carry = 1;
sum = 0;
node1 = node1->next; node2 = node2->next;
}
return *sumList;
}
首先,這段代碼是否正確?它看起來可行,但當給定兩個不同長度的鏈表(整數)時,它會出現故障。我想知道這個問題是否只是爲了解決整數長度相同的情況。如果不是,我將如何總結兩個不同長度的列表?我的天真的解決方案是存儲每個列表的長度,然後使用它來創建只有一個數字將貢獻的數字,直到兩個整數對齊。有沒有比這更優雅的東西?
不應它是如果(node1->下),並且如果(node2-> next)?? – ordinary
@常規否,因爲'node1'或'node2'指向null,並且訪問'node-> next'無效。 –
好的,是的。這是正確的答案。 – ordinary