欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Leetcode学习初篇——两数相加

程序员文章站 2024-03-14 22:00:23
...

题目:

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;
    }

}

 从官方题解里偷了张图

Leetcode学习初篇——两数相加

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

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

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

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

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

这是为什么呢?

 

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

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

 

相关标签: Leetcode学习