題目描述數組
給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,而且它們的每一個節點只能存儲 一位 數字。網絡
若是,咱們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。學習
您能夠假設除了數字 0 以外,這兩個數都不會以 0 開頭。spa
示例指針
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -> 0 -> 8 緣由:342 + 465 = 807
題目要求code
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * struct ListNode *next; 6 * }; 7 */ 8 9 10 struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
11 }
題解blog
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * struct ListNode *next; 6 * }; 7 */ 8 9 10 struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){ 11 int temp=0; 12 struct ListNode *p1=l1; 13 struct ListNode *p2=l2; 14 struct ListNode *p3 = (struct ListNode*)malloc(sizeof(struct ListNode)); 15 struct ListNode *l3=p3; 16 for(int i=0;;i++){ 17 if(p1==NULL&&p2==NULL){//兩數結束 18 if(temp==1){//判斷進位 19 struct ListNode *p4 = (struct ListNode*)malloc(sizeof(struct ListNode)); 20 p4->val=1; 21 p4->next=NULL; 22 p3->next=p4; 23 p3=p4; 24 } 25 break; 26 } 27 else if(p1==NULL){//數一結束 28 while(p2!=NULL){ 29 struct ListNode *p4= (struct ListNode*)malloc(sizeof(struct ListNode)); 30 int sum=p2->val+temp; 31 temp=sum/10; 32 sum%=10; 33 p4->val=sum; 34 p4->next=NULL; 35 p3->next=p4; 36 p3=p4; 37 p2=p2->next; 38 if(p2==NULL)break; 39 } 40 if(temp!=0){//數二也結束後判斷進位 41 struct ListNode *p4= (struct ListNode*)malloc(sizeof(struct ListNode)); 42 p4->val=1; 43 p4->next=NULL; 44 p3->next=p4; 45 } 46 break; 47 } 48 else if(p2==NULL){ 49 while(1){ 50 struct ListNode *p4= (struct ListNode*)malloc(sizeof(struct ListNode)); 51 int sum=p1->val+temp; 52 temp=sum/10; 53 sum%=10; 54 p4->val=sum; 55 p4->next=NULL; 56 p3->next=p4; 57 p3=p4; 58 p1=p1->next; 59 if(p1==NULL)break; 60 } 61 if(temp!=0){ 62 struct ListNode *p4= (struct ListNode*)malloc(sizeof(struct ListNode)); 63 p4->val=1; 64 p4->next=NULL; 65 p3->next=p4; 66 } 67 break; 68 }
//兩數都未結束,正常相加 69 int sum=p1->val+p2->val+temp; 70 temp=sum/10; 71 sum%=10; 72 struct ListNode *p4 = (struct ListNode*)malloc(sizeof(struct ListNode)); 73 p4->val=sum; 74 p4->next=NULL; 75 p3->next=p4; 76 p3=p4; 77 p1=p1->next; 78 p2=p2->next; 79 } 80 return l3->next; 81 }
1.malloc內存
用於動態分配內存,用法爲:leetcode
int *p = (int *)malloc(sizeof(int))資源
char *ch = (char *)malloc(sizeof(char))
返回一個指針,當資源不足沒法分配時返回NULL
可用free()釋放內存,用法爲:
free(p)
free(ch)
2..鏈表
第一次寫鏈表,只涉及了鏈表末端的節點添加,之後繼續學習刪除、插入、鏈接等操做,感受不難,只是在玩IQ題,不過......鏈表仍是得繼續好好刷題!
該題的鏈表節點包括了節點值和下一個節點的位置兩個內容,節點值能夠是整型、數組等一個或多個變量,下一個節點的位置用p->next引用,可是p->next->value是錯誤的。
本題須要注意的點是在兩數相加時、一數結束時、兩數都結束時判斷是否須要進一位。
題目來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/add-two-numbers著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。