其他分享
首页 > 其他分享> > Leetcode学习初篇——两数相加

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的垃圾回收机制回收,不会占用内存。

 

Hyporite 发布了2 篇原创文章 · 获赞 0 · 访问量 30 私信 关注

标签:ListNode,int,相加,t2,next,初篇,result,t1,Leetcode
来源: https://blog.csdn.net/qq_39377543/article/details/103979262