题目:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
评价:
解题思路:
分为四个阶段
变量准备:
’用pListNode qListNode作为两个链表的指针
用newListNode作为新建链表的根节点 tListNode作为指向新建空节点
用newin表示当前位进位 1为有进位 0为无进位
用lastin表示上一位是否有进位
四个阶段:
1.加和数字及上一位进位 若大于10 则代表有进位 newin=1
2.对节点赋值
3.即将进入下一个节点 此时的newin将变成下一个节点的lastin 同时pListNode qListNode进入下一个节点
4.创造一个新节点 tListNode并指向它
可以先试着用这个思想写写 肯定会有数据通不过 然后再改细节 完善条件 不可能一次成功的
代码:
(直接贴上在eclipse中的代码 函数设置成了静态 可以在public static void main(String[] args)看各种数据大的输入和输出 不必局限于断点调试)
public class pascaltriangle {
static class ListNode {
int val;
ListNode next;
public ListNode(int x) { val = x; }
}
public static void main(String[] args) {
ListNode aListNode=new ListNode(8);
ListNode bListNode=new ListNode(0);
ListNode cListNode=new ListNode(1);
aListNode.next=bListNode;
bListNode.next=cListNode;
ListNode dListNode=new ListNode(5);
ListNode eListNode=new ListNode(0);
dListNode.next=eListNode;
ListNode mListNode=addTwoNumbers(aListNode,dListNode);
while(mListNode!=null)
{
System.out.print(mListNode.val+" ");
mListNode=mListNode.next;
}
}
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode pListNode=l1;
ListNode qListNode=l2;
ListNode newListNode =new ListNode(0) ;
ListNode tListNode=newListNode;
int lastin=0;
int newin=0;
while(pListNode!=null||qListNode!=null||(pListNode==null&&qListNode==null&&lastin==1))
{
int m=0;
if(pListNode!=null&&qListNode!=null)
m=pListNode.val+qListNode.val+lastin; //加和数字
else if(pListNode==null&&qListNode!=null)
m=qListNode.val+lastin;
else if(pListNode!=null&&qListNode==null)
m=pListNode.val+lastin;
else if(pListNode==null&&qListNode==null)
m=lastin;
if(m>=10)
{
newin=1;
m=m%10;
}
tListNode.val=m; //赋值
lastin=newin; //更新
newin=0;
if(pListNode!=null)
pListNode=pListNode.next;
if(qListNode!=null)
qListNode=qListNode.next;
if(pListNode==null&&qListNode==null&&lastin==0)
break;
ListNode nextListNode=new ListNode(0);//创建节点
tListNode.next=nextListNode;
tListNode=nextListNode;
}
return newListNode;
}
}