Leetcode学习初篇——两数相加
程序员文章站
2024-03-14 22:00:23
...
题目:
先对题目做一个分析 :
这是一个两个链表对应位置数字相加,最后存入第三个链表
开始写代码!
/**
* 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的垃圾回收机制回收,不会占用内存。
上一篇: 51nod 1105 第K大的数