题目:给两个数字,数字以链表的形式表示。链表首部是个位,把两个数字加起来。
思路:一位一位相加即可,设置一个int型变量carry来存储进位,每次相加把对应的位数加上进位。相加的和取余数留在结果的这一位,相加的和除以10就是进位。carry为0并且两个链表都遍历结束时结束循环。
/**
* 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 p=new ListNode(0);
ListNode head=p;
int carry=0; //进位
while(l1!=null||l2!=null||carry!=0){
ListNode cur=new ListNode(0);
int sum=((l1==null)?0:l1.val)+((l2==null)?0:l2.val)+carry;
cur.val=sum%10;
carry=sum/10;
p.next=cur;
p=p.next;
l1=(l1==null)?l1:l1.next;
l2=(l2==null)?l2:l2.next;
}
return head.next;
}
}
收获:
1.使用问号表达式写起来更方便,逻辑也很通顺
(判断条件)?条件为真的结果:条件为假的结果