Leetcode学习笔记(两数相加)

本文深入探讨了链表加法的实现细节,包括如何通过设置头节点简化代码,使用尾插法进行节点插入,以及处理不同长度链表的加法运算。特别关注了进位标志的设置与新增节点的处理,提供了完整的解题代码。

在这里插入图片描述
思考及遇到的几个问题:

1、关于头结点,一般会给返回的链表变量,设置一个头节点。再将相加的节点值链接上去。因此返回时代码如下,可以省略掉头结点。

return out->next;

2、关于链表插入,这里使用的是尾插法,因此引入另外一个变量如下。让该变量始终指向返回链表的最后一个节点,并在初始化时令其等于返回变量,方便循环插入。

ListNode *out=new ListNode(0), *L;
L = out;

3、关于解题思路,将短链表的空位补0,再与另一个同位相加,并设置进位标志。当最后一位还是有进位时,注意新增节点。
在这里插入图片描述
解题代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *out=new ListNode(0), *L;
		L = out;
        int sign=0;
        ListNode *temp;
		while(l1!=nullptr||l2!=nullptr){
            int x = l1==nullptr?0:l1->val;
            int y = l2==nullptr?0:l2->val;
            temp =new ListNode((x+y+sign)%10);
            L->next=temp;
            L=temp;
            if(x+y+sign>=10)
                sign=1;
            else
                sign=0;
            if(l1!=nullptr)
                l1 = l1->next;
            if(l2!=nullptr)
                l2=l2->next;
        }
        if(sign==1){
            temp = new ListNode(1);
            L->next=temp;
        }
		return out->next;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值