leetcode 2 兩數相加 C

2021-10-04 05:23:07 字數 2646 閱讀 6669

主要部分**

一兩周之前剛接觸結構體struct,這個兩數相加的程式還是讓我get到了很多。

示例:

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

輸出:7 -> 0 -> 8

原因:342 + 465 = 807

1.在使用malloc分配動態記憶體的時候,需要給他「一整套」。

struct listnode 

;struct listnode *l3 =

(struct listnode*

)malloc

(sizeof

(struct listnode));

//l3->val = 0; l3->next = null;

如上**,如果單單只有第一句使用malloc分配動態記憶體的語句,是不夠的,執行起來會出現如下報錯:

line 70: char 15: runtime error: member access within misaligned address 0xbebebebebebebebe for type 『struct listnode』, which requires 8 byte alignment (listnode.c)

0xbebebebebebebebe: note: pointer points here

< memory cannot be printed >

但是我們在給了他"空房子"之後,把"家具"都填進去,如:

struct listnode *l3 =

(struct listnode*

)malloc

(sizeof

(struct listnode));

l3->val =

0; l3->next =

null

;

問題就解決了。

2.情況多樣化的考慮

在考慮最後一種情況的時候,我想到了類似1+9,卻沒有想到1+99,1+999之類,致使程式在執行到 99+1這個測試用例的時候輸出了錯誤的測試用例。

3.其他不足的就是程式執行用時較長;但是相應的執行消耗記憶體卻是超過了100%的其他c程式。

語言:c

一些引數的定義

struct listnode *l3 =

(struct listnode*

)malloc

(sizeof

(struct listnode));

l3->val =

0; l3->next =

null

;struct listnode* h1 = l1,

* h2 =l2,

* h3 = l3;

int flag =

0;

對相同位數的對應部分進行處理

while

(h1 && h2)

h3->val +

=(h1->val + h2->val);if

(h3->val >=10)

h1 = h1->next;

h2 = h2->next;if(

(h1 || h2)

&&!h3->next)

}

考慮如果兩個n為相加最後為n+1位的情況

if

(!h1 &&

!h2 && flag)

}

考慮第乙個或者第二個數長出來的部分

if

(h1)

h1 = h1->next;if(

!h3->next && h1)

if(h1) h3 = h3->next;}if

(flag &&

!h3->next)

}}

這次寫的**有些亂七八糟,還要繼續努力學習!

遇到了不同的測試用例,然後這邊補一下,那邊補一下。這是乙個挺不好的習慣,以後要把情況都考慮清楚。

其次就是對結構體不是特別掌握,導致了執行時頻繁的執行錯誤。

在寫到blog末尾的時候,我想,這道題的**大可不必如此冗長。乙個新思路跳出了腦海:

鏈1全部複製到鏈3上,然後把鏈2乙個乙個結點往鏈3上面加

如此一來,不論是進製或者是動態記憶體的分配都顯得清晰明了。

leetcode 2(兩數相加)C

鍊錶 可以改變長度,在刪除物件的時候會自動釋放記憶體,占用的記憶體空間也不需要連續。鍊錶是用 listnode 結點構成的,這些結點之間用指標鏈結。最簡單的單向鍊錶 每個結點代表兩個東西 1.它自己的值value 2.指向下乙個結點的指標next。next為空時,表示是鍊錶的最後乙個結點。p val...

LeetCode2 兩數相加 c

題目描述 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。思路 遍歷兩個鍊錶,判斷兩數相加...

LeetCode2 兩數相加

嗯。今天兩個簡單題,我可能要墮落了 先貼第乙個 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原因 342 465 807...