力扣第二题——两数相加

1.问题描述

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

来源:力扣(LeetCode)链接:https://leetcode.cn/problems/add-two-numbers

 2.实列

 3.解法

/*这里是定义一个链表的结点,注意定义一个链表的结点至少需要包含两个元素,一个是value,这个是数据空间,用来放需要存放的值;一个是next,这个是指针域,他表示用来指向下一个结点。这样我们才能穿起来成一个链表*/
public class ListNode {
     int val;
     ListNode next;
     ListNode() {}
     ListNode(int val) { this.val = val; }
     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
 
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = null;
        ListNode right = null;
        int flag = 0;//设置一个标识为两个数的相加有进位的时候做准备。
        while (l1 != null || l2 != null) {
        //只要这两个链表不为空我就一直做加法运算
            int num1 = l1 != null ? l1.val : 0;
            int num2 = l2 != null ? l2.val : 0;
            //这两步是为了防止一个链表有值,另外一个链表没有值的,确保加法可以正常执行
            int sum = num1 + num2+flag;
            flag=sum/10;
          /*等价于
            if(sum>=10)
                flag=1;
            else
                flag=0;*/        
            if (head == null) {
                //head头指针只用保存个位就行,最后返回head结点就行。
                head = right = new ListNode(sum % 10);
            } else {
                right.next = new ListNode(sum % 10);
                right = right.next;
            }
            if (l1 != null) {
                l1 = l1.next;
                //指向下一个结点
            }
            if (l2 != null) {
                l2 = l2.next;
                //指向下一个结点
            }
        }
        if (flag>0){
            //当两个链表最后两个数相加的时候产生了进位,那么就多一个结点保存,如例图中的样子
            right.next=new ListNode(1);
        }
        return head;
    }
}

l1和l2就是两个链表的头一个结点,也叫头指针。 其实这题只要能够理解链表,思路非常简单。就是把两个链表相同位数的值取出来相加,得到的值放到一个新的链表里面。只需要注意头指针head一定要是个位的就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值