给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
//直接再链表上操作 class planB{ public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode n1 = l1; ListNode n2 = l2; int l1Lenth = 0; int l2Lenth = 0; ListNode temp1 = l1; ListNode temp2 = l2; ListNode end1 = null; ListNode end2 = null; while(true){ if(temp1 == null&&temp2!=null){ l1Lenth = 0; l2Lenth = 1; break; } if(temp1 != null&&temp2==null){ l1Lenth = 1; l2Lenth = 0; break; } if(temp1 == null&&temp2==null){ l1Lenth = l1Lenth; break; } if(temp1 == null&&temp2==null){ l1Lenth = l1Lenth; break; } temp1 = temp1.next; temp2 = temp2.next; } //按节点相加,不管进位 while(true){ if(n1==null||n2==null){ break; } addTwoNodes(n1,n2); n1 = n1.next; n2 = n2.next; } n1 = l1; n2 = l2; //调整长度较长的链表的进位, if(l1Lenth>=l2Lenth){//调整长度较长的链表l1的进位, while(true){ if(n1 == null){ break; } else { if(n1.val>=10){ if(n1.next !=null) { n1.next.val++; } else{ n1.next = new ListNode(1); } n1.val = n1.val-10; } } n1 = n1.next; } } else{//或者调整长度较长的链表l2的进位, while(true){ if(n2 == null){ break; } else { if(n2.val>=10){ if(n2.next !=null) { n2.next.val++; } else{ n2.next = new ListNode(1); } n2.val = n2.val-10; } } n2 = n2.next; } } return l1Lenth>=l2Lenth?l1:l2; } //遍历较长的链表,在长链表上进行操作,假设n1是较长链表的节点 public void addTwoNodes(ListNode n1,ListNode n2){ int sum = n1.val+n2.val; n1.val = sum; n2.val = sum; } }
原文:https://www.cnblogs.com/dazhu123/p/12395013.html