2题 两数相加
思路: 新建空链表,遍历两个链表,一位一位加,用upper记录进位,每次添加一个节点都要新建一个newNode,对newNode赋值后再加入到链表l3中,最后记得加完链表之后还要判断upper是否为0,不为0还要在加个节点。节点最后要指向null。最后返回要返回res这个最前面的节点。
时间复杂度: O(n) 但每次到新建节点,空间上会复杂点,应该有更好的方案。
/**
* 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 res=new ListNode(0);
ListNode l3=res;
int upper=0;
while(l1!=null && l2!=null){
ListNode newNode=new ListNode(0);
newNode.val=(l1.val+l2.val+upper)%10;
upper=(l1.val+l2.val+upper)/10;
l1=l1.next;
l2=l2.next;
l3.next=newNode;
l3=l3.next;
}
while(l1!=null){
ListNode newNode=new ListNode(0);
newNode.val=(l1.val+upper)%10;
upper=(l1.val+upper)/10;
l1=l1.next;
l3.next=newNode;
l3=l3.next;
}
while(l2!=null){
ListNode newNode=new ListNode(0);
newNode.val=(l2.val+upper)%10;
upper=(l2.val+upper)/10;
l2=l2.next;
l3.next=newNode;
l3=l3.next;
}
if(upper!=0){
ListNode newNode=new ListNode(0);
newNode.val=upper;
l3.next=newNode;
l3=l3.next;
}
l3.next=null;
return res.next;
}
}