此博客链接:https://www.cnblogs.com/ping2yingshi/p/12772828.html
两数相加2()
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
进阶:
如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。
示例:
输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 8 -> 0 -> 7
题解:
思路:
1.把两个链表反转。
2.用两数相加的思想做。
3.把相加和的链表也反转。
没有输出正确代码如下:
class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode rel1=new ListNode(0);//l1反转的头节点 ListNode rel2=new ListNode(0);//l2反转的头节点 ListNode re1=rel1.next; ListNode re2=rel2.next; while(l1!=null)//反转l1 { ListNode temp=l1; l1=l1.next; temp.next=re1; re1=temp; } while(l2!=null)//反转l2 { ListNode temp=l2; l2=l2.next; temp.next=re2; re2=temp; } ListNode newsum=new ListNode(0);//新建存储和节点 ListNode cur=newsum; int count=0; int sumcount=0; while(rel1!=null||rel2!=null) { if(rel1!=null&&rel2!=null) { sumcount=rel1.val+rel2.val+count; } else if(rel1==null&&rel2!=null) sumcount=rel2.val+count; else sumcount=rel1.val+count; count=sumcount/10; sumcount=sumcount%10; cur.next=new ListNode(sumcount); cur=cur.next; if(rel1!=null) rel1=rel1.next; if(rel2!=null) rel2=rel2.next; } if(count==1) cur.next= new ListNode(1); ListNode renewsum=new ListNode(0); ListNode newcur=renewsum; while(newsum!=null)//反转和链表 { ListNode temp=newsum; newsum=newsum.next; temp.next=newcur; newcur=temp; } return renewsum.next; } }
报错截图;
修改了代码逻辑,把有些新建的头节点没有去掉,但是还是输出为空。
代码如下:
class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode rel1=new ListNode(0);//l1反转的头节点 ListNode rel2=new ListNode(0);//l2反转的头节点 ListNode re1=rel1; ListNode re2=rel2; while(l1!=null)//反转l1 { ListNode temp=l1; l1=l1.next; temp.next=re1; re1=temp; } while(l2!=null)//反转l2 { ListNode temp=l2; l2=l2.next; temp.next=re2; re2=temp; } ListNode newsum=new ListNode(0);//新建存储和节点 ListNode cur=newsum; ListNode rel11=rel1.next; ListNode rel22=rel2.next; int count=0; int sumcount=0; while(rel11!=null||rel22!=null) { if(rel11!=null&&rel22!=null) { sumcount=rel11.val+rel22.val+count; } else if(rel11==null&&rel22!=null) sumcount=rel22.val+count; else sumcount=rel11.val+count; count=sumcount/10; sumcount=sumcount%10; ListNode curnode=new ListNode(sumcount); cur.next=curnode; cur=cur.next; if(rel11!=null) rel11=rel11.next; if(rel22!=null) rel22=rel22.next; } if(count==1) { ListNode curnode=new ListNode(1); cur.next=curnode; } ListNode renewsum=new ListNode(0); ListNode newcur=renewsum; ListNode newsum1=newsum.next; while(newsum1!=null)//反转和链表 { ListNode temp=newsum1; newsum1=newsum.next; temp.next=newcur; newcur=temp; } return renewsum.next; } }