0

我正在编写一段 C# 代码,该代码添加存储在单链表中的数字。我创建了一个包含 11 11 8 的缓冲区单链表。最终列表必须看起来像 1 2 9 。每个大于 10 的元素都必须将结转传递到下一个数字,并且 %10 的结果将传递到将创建 1 2 9 的最终列表。如何处理从每个数字开始的结转从左到右?

我创建了以下逻辑,但显然我忽略了一些东西。

 for (int i = 0; i < bufferList.Size(); i++)
 {
     int mostLeftValue = Convert.ToInt32(bufferList.GetValue(i));
     if (mostLeftValue >=10  && i + 1 < bufferList.Size())
     {
         int nextLeftValue = Convert.ToInt32(bufferList.GetValue(i + 1))+1;
         int modedNextValue = nextLeftValue % 10;
         finalList.InsertAtTail(modedNextValue);           
     }

     int moddedValue =  mostLeftValue %10 ;
     finalList.InsertAtFront(moddedValue);
4

1 回答 1

1

看起来您没有将任何东西从一个值传递到下一个值。此外,您正在添加到输出列表的两端,这似乎很可疑。

这是一个简单的实现List<int>- 它基本上完成了您手动添加两个数字时所做的事情,只是没有实际添加。取当前数字,加上携带的数字,存储“单位”,将“十”带到下一列。

Number      11   11    8
Carry        0 ┌─ 1 ┌─ 1 ┌─ 0
Sum         11 │ 12 │  9 │
Store        1 │  2 │  9 │  stop
Carry over  1 ─┘ 1 ─┘ 0 ─┘

您应该能够针对链表([i] -> .GetValue(i).Add -> .InsertAtTail.Count -> .Size()类似名称)对其进行修改:

int carry = 0;
for (int i = 0; i < input.Count; i++)
{
    int sum = carry + input[i]; // add previous carry
    output.Add(sum % 10);       // store the "units"
    carry = sum / 10;           // carry the "tens"
}
while (carry > 0)               // anything left carried?
{
    output.Add(carry % 10);     // store the "units"
    carry = carry / 10;         // carry the "tens"
}
于 2012-11-27T08:34:43.933 回答