牛客网高频算法习题系列-BM11-链表的加法(二)题目说明假设链表中每个节点的值list是0-9,那么链表作为一个整体可以表示一个整数。给定两个这样的链表,生成表示两个整数相加值的结果链表。见原标题:BM11链表加法(二)方案一:使用栈一、特例判断:如果链表1为空,则直接返回链表2如果链表2为空,则直接返回链表1否则,使用2栈用于存储两个链表的节点:首先将两个链表中的节点加入栈中;遍历两个栈,即进行加法,将值添加到新的栈中,这样节点值可以逆序比较Add,需要用一个变量来记录进位值;需要注意的是,遍历后,需要根据进位值判断是否需要增加额外的节点;最后,根据新的栈构造添加的链表并返回。如果你不想使用额外的堆栈空间,可以考虑在执行加法之前将两个链表倒序排序。代码导入java.util.Stack;publicclassBm011{/***链表添加:使用栈**@paramhead1ListNodeclass*@paramhead2ListNodeclass*@returnListNodeclass*/publicstaticListNodeaddInList(ListNodehead1,ListNodehead2){//如果链接链表1为空,直接返回链表2if(head1==null){returnhead2;}//如果链表2为空,直接返回链表1if(head2==null){returnhead1;}//2个栈用来存放两个链表的节点Stacknodes1=newStack<>();Stacknodes2=newStack<>();while(head1!=null){nodes1.push(head1);head1=head1.next;}while(head2!=null){nodes2.push(head2);head2=head2.next;}//记录进位值intaddOne=0;Stack<整数>newNodes=newStack<>();//遍历栈,即进行加法,将值添加到新的栈中while(!nodes1.isEmpty()||!nodes2.isEmpty()){intval1=0,val2=0,newVal=0;如果(!nodes1.isEmpty()){val1+=nodes1.pop().val;}if(!nodes2.isEmpty()){val2+=nodes2.pop().val;}newVal+=addOne+val1+val2;如果(newVal>9){newVal=newVal%10;添加一个=1;}else{addOne=0;}newNodes.push(newVal);}if(addOne==1){newNodes.push(1);}ListNodenewHead=newListNode(-1);ListNodenext=newHead;while(!newNodes.isEmpty()){next.next=newListNode(newNodes.pop());下一个=下一个。下一个;}返回newHead.next;}publicstaticvoidmain(String[]args){//链表一:1->3->5ListNodehead1=ListNode.testCase3();//蓝表二:2->4->6ListNodehead2=ListNode.testCase4();//测试用例,预期输出:3->8->1ListNode.print(addInList(head1,head2));}}$1.01^{365}≈37.7834343329$$0.99^{365}≈0.02551796445$相信坚持的力量!