package 剑指offer;
/**
* 我们要明白链表逆序的好处
* 4->2->5
* 5->8->1
* 9->0->7
*
* 第一:数需要对齐,尤其是两个数不是相同位数的情况,那么那就回想一下:我们做加法都是尾部对齐,而不是头部
* 这样的话,逆序是比较符合人的思维逻辑的
* 第二:如果存在进位的情况,那我进位是会加到后面,而逆序的时候,下一个节点就是后位。所以逆序把问题变得更加简单
*
*/
public class leetcode2两数相加 {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//保存一个头指针与尾指针
ListNode head=null;
ListNode tail=null;
//定义进位
int carry=0;
//必须两个链表都要遍历完成才行
while(l1!=null||l2!=null){
//定义value
int value1=l1!=null?l1.val:0;
int value2=l2!=null?l2.val:0;
//定义sum
int sum=value1+value2+carry;
//定义下一位的carry
carry=sum>=10?1:0;
//定义下一位的result
int result=sum>=10?sum-10:sum;
if(head==null){
tail=head=new ListNode(result);
}else {
tail.next=new ListNode(result);
tail=tail.next;
}
if(l1!=null){
l1=l1.next;
}
if (l2!=null){
l2=l2.next;
}
}
if (carry>0){
tail.next=new ListNode(1);
}
return head;
}
}
leetcode3 链表相加
最新推荐文章于 2023-07-03 17:27:20 发布