2. Add Two Numbers(Linked List)

这篇博客记录了作者复习链表知识并解决LeetCode中关于链表加法的问题。题目要求将两个逆序存储的非负整数链表相加,并以链表形式返回结果。示例输入(2->4->3)和(5->6->4),输出为7->0->8。C语言实现的运行时间为20毫秒。
摘要由CSDN通过智能技术生成

最近复习真的是曾经学过的链表,所以做了一下leetcodeLinked List的题目,做的都是简单题,还非得挂这里,我也只能说权当纪录一下,何况人家雁过还留声呢,不想再像以前一样走过却啥也未曾留下——记忆有时候也不怎么靠谱。

题目:

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

Language C:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode *p, *h;
    h = p;
    int carry = 0; //int型进位符号carry
    while(l1 || l2 || carry){
        p->next = (struct ListNode *)malloc(sizeof(struct ListNode)); //新链表生成节点
        p = p->next;
        p->val = 0;
        //加l1/l2元素值
        if(l1){
            p->val += l1->val;
            l1 = l1->next;
        }
        if(l2){
            p->val += l2->val;
            l2 = l2->next;
        }
        // 调整进位
        p->val += carry;
        carry = p->val / 10;
        p->val %= 10;
    }
    p->next = NULL;// It's very important! 新链表最后节点的next指向null
    return h->next;
}

runtime:20 ms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值