2.两数相加
这是第二题,还行豁~。
题解:
- 首先就是对题目的理解。这里你要知道两链表中数字的排列都是逆序的,也就是说示例一中2-4-3他原本的数字应该是342。同理可得下面链表的意思,二者相加所得到的结果也是逆序的,342+465,按照咱们正常的加法规则的话,那刚好就可以从头结点开始相加,毕竟是逆序的,逆序的,记住了哦~
- 然后将头结点的值相加之后,我们需要保存进位的数值,然后对得到的sum进行一个处理,对吧。
- 接着因为最后的结果是以链表展示的,而且是逆序的,那就可以将得到的数值赋值给新创建的结点,最后返回即可。
- 这里用了pre辅助头结点,最后的返回结果是pre.next,因为我们头结点的值是0啊。
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode pre=new ListNode(0);
ListNode cur=pre;
int carry=0;
while(l1!=null||l2!=null){
int x=l1==null?0:l1.val;
int y=l2==null?0:l2.val;
int sum=x+y+carry;
//获取进位数
carry=sum/10;
//获取个位数
sum=sum%10;
//连接组合链表
cur.next=new ListNode(sum);
cur=cur.next;
if(l1!=null) l1=l1.next;
if(l2!=null) l2=l2.next;
}
if(carry==1){
cur.next=new ListNode(carry);
}
return pre.next;
}
}
祝你刷题愉快哦~
身体健康!
头发也健康!