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;}
}
祝你刷题愉快哦~
身体健康!
头发也健康!