一、题目
注意审题,这个链表是不太头节点的,研究了好久才发现
二、上代码
/** * 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) { int out=0;//进位判断 ListNode ln4=new ListNode(); ListNode ln3=ln4; while(l1!=null && l2!=null){ int sum=l1.val+l2.val; sum=sum+out; out=0; if(sum>=10){ sum=sum%10; out=1; } ln3.next=new ListNode(sum,null); ln3=ln3.next; l1=l1.next; l2=l2.next; } if(l1!=null){ while(l1!=null){ int sum=l1.val; sum=sum+out; out=0; if(sum>=10){ sum=sum%10; out=1; } ln3.next=new ListNode(sum,null); ln3=ln3.next; l1=l1.next; } }else{ while(l2!=null){ int sum=l2.val; sum=sum+out; out=0; if(sum>=10){ sum=sum%10; out=1; } ln3.next=new ListNode(sum,null); ln3=ln3.next; l2=l2.next; } } if(out>0){ ln3.next=new ListNode(out,null); ln3=ln3.next; } return ln4.next; } }
三、见解
时间复杂度不错,空间复杂度还可以改进
四、参考别人的代码
/** * 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 l3 = new ListNode(-1); int next_ten = 0; ListNode pre =l3; while(l1!=null||l2!=null) { int data_l1 = l1==null?0:l1.val; int data_l2 = l2==null?0:l2.val; int next = data_l2+data_l1; int result = (next_ten+next)%10; next_ten = (next_ten+next)/10; pre.next= new ListNode(result); if(l1!=null)l1=l1.next; if(l2!=null)l2=l2.next; pre = pre.next; } if(next_ten==1) { pre.next = new ListNode(next_ten); } return l3.next; } }
真的强