C語言鏈表之兩數相加

題目描述數組

給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,而且它們的每一個節點只能存儲 一位 數字。網絡

若是,咱們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。學習

您能夠假設除了數字 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著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。

相關文章
相關標籤/搜索