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;
}

 

posted @ 2020-07-06 17:24  CCxiao5  阅读(127)  评论(0编辑  收藏  举报