Leetcode学习初篇——两数相加

题目:

先对题目做一个分析 :

这是一个两个链表对应位置数字相加,最后存入第三个链表

开始写代码!

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode t1=l1;
        ListNode t2=l2;
        ListNode result=new ListNode(0);
        ListNode tempResult=result;
        int temp=0;
        int carry=0;
        while(t1!=null || t2!=null){
            int a =(t1!=null)? t1.val:0;
            int b =(t2!=null)? t2.val:0;
            int s=a+b+carry;
            carry=s/10;
            tempResult.next=new ListNode(s%10);
            tempResult=tempResult.next;
            if(t1!=null) t1=t1.next;
            if(t2!=null) t2=t2.next;
        }
        if(carry>0){
            tempResult.next=new ListNode(carry);
        }
        return result.next;
    }

}

 从官方题解里偷了张图

上图可以较清晰的理解这道题

如果是两位数+三位数的话

在第三位数相加时,两位数的链表节点为空,其值默认为0

并且本题代码中运用了哑节点的概念

在最后返回结果时,返回的是result.next

这是为什么呢?

 

因为本题的计算是从result.next开始的,result就是一个head节点,里面只有下一个数的节点地址,本身并没有值

并且在传回result.next后,result会被java的垃圾回收机制回收,不会占用内存。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值