單鏈表表示的大數相加問題

來源:互聯網
上載者:User

記錄下來怕自己忘記

問題描述:

2個單鏈表(singly linked list),每一個節點裡面一個0-9的數字,輸入就相當於兩個大數了。然後返回這兩個數的和(一個新list)。這兩個輸入的list 長度相等。 要求是:1. 不用遞迴。2. 要求演算法在最好的情況下,只遍曆兩個list一次,最差的情況下兩遍。

條件: 從高到低位儲存大數。空間複雜度O(1)

記兩個單鏈表分別為a,b; 長度為n  ,儲存結構的單鏈表為c

分析:因為要求只能遍曆list最多兩次,且不能回頭,所以只能是使用指標來記錄因為進位而導致值更改的位置了~

a,b對應節點之和的情況只有3中,sum <9, sum = 9, sum >9

<9 時,直接賦值,當前指標pc前進,記錄指標p也前進

= 9 時,要注意,意味著記錄指標p不能移動(此時p指向的是<9的節點),pc前進

>9時,意味著要進位,從p到pc間的所有節點更新值。

因為進位而導致值修改,只能是值+1,此處安放一個指標。

 

虛擬碼如下:

//初始化一個單鏈表c,長度n+1 ,節點初始值為0#。。。。其實應該邊算邊new 節點的哈……

linkedlist  c = new linkedlist(n+1,0)

node * p = c.head, *pc = c.head

node * pa = a.head, *pb = b.head

pc = pc->next

while(pc)

     sum = pa->value +pb->value

     if  sum < 9

           pc->value = sum

           p = pc

           pc = pc->next

   else if sum ==9

           pc = pc->next

    else

            pc->value = sum%10

            p->value = p->value +1

            do                    

                    p = p->next

                    p->value = 0

             while(p->next != pc);

#endwhile         

if c.head->value ==0

       node *tmp = c.head

       c.head = c.head->next

       delete *tmp

 

 例如

a:    4   4  4   4   0

b:    5   5   5   8   1

c: x  9   9  9   12 

   p                 pc

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.