1. 程式人生 > 實用技巧 >LeetCode——兩數相加

LeetCode——兩數相加

題目地址:https://leetcode-cn.com/problems/add-two-numbers/

解題思路:簡單鏈表操作,注意判斷連結串列的長度以及最高位進位的情況。

值得注意的幾組樣例

>>>[5]
>>>[5]

>>>[1,8]
>>>[0]

>>>[9,8]
>>>[1]

>>>[1]
>>>[9,9]

>>>[5]
>>>[5]

遇到的問題:分配記憶體不能用new進行分配記憶體。原因是使用的是C編譯器,而不是C++。

具體程式碼:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode *l, *p, *p1, *p2;
    p1 = l1;
    p2 = l2;
    l = (struct ListNode*)malloc(sizeof
(struct ListNode)); p = l; int flag = 0;//進位標誌符 while (p1 && p2 ) { p->next = (struct ListNode*)malloc(sizeof(struct ListNode)); p = p->next; int tmp = p1->val + p2->val + flag; if (tmp >= 10) { p->val = tmp % 10; flag
= 1; } else { p->val = tmp; flag = 0; } p1 = p1->next; p2 = p2->next; } p->next = NULL; if (p1) p->next=p1; if (p2) p->next = p2; while(p->next){ p=p->next; if(flag){ p->val=p->val+1; if(p->val>=10){ p->val %=10; flag = 1; } else flag=0; } } //最高位 if (flag) { p->next = (struct ListNode*)malloc(sizeof(struct ListNode)); p = p->next; p->val = 1; p->next = NULL; } return l->next; }