Leetcode 第2题 两数相加(Java实现)
解题思路
刚刚学完韩顺平老师的《数据结构与算法》的链表部分,就来leetcode上找了一道题来练习。
- 首先定义一个ListNode的类,val用来存放整型数据,.next指向下一个节点;
- 再定义两个链表相加的函数,输入为链表l1和l2;
2.1定义一个头节点head,它不用来存放数据,只是用于索引;
2.2 定义一个类型为ListNode的中间变量temp,用来存放相加后的值;
2.3 用carry来存两数相加时溢出的值;
2.4 来一个while循环,循环终止条件是l1和l2都指向空节点;
2.4.1 从第一个节点对l1和l2进行相加操作;
2.4.2 逐个节点的对res进行赋值;
2.5 退出循环后,看一下carry中是否还有值,有值的话继续给下一个res节点进行赋值; - 完毕
代码实现
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = new ListNode(0);
ListNode res = head;
int carry = 0;
while (l1 != null || l2 != null) {
if(l1 != null && l2 !=null) {
int x = l1.val, y = l2.val;
int sum = carry + x + y;
carry = sum / 10;
res.next =new ListNode(sum % 10);
l1 = l1.next;
l2 = l2.next;
}else if(l1 != null) {
int sum= carry +l1.val;
carry=sum/10;
res.next = new ListNode(sum%10);
l1 = l1.next;
}else {
int sum = carry +l2.val;
carry=sum/10;
res.next = new ListNode(sum%10);
l2 = l2.next;
}
res = res.next;
}
if(carry>0) {res.next = new ListNode(carry);}
return head.next;
}
来源:CSDN
作者:涂一乐
链接:https://blog.csdn.net/zz651044657/article/details/103949918