两数相加II--链表
题目
给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
进阶:
如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。
示例:
输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4) 输出: 7 -> 8 -> 0 -> 7
思想
大家先参考另一篇我的博客题目https://www.cnblogs.com/guohai-stronger/p/11715023.html
题目中说了不能翻转链表, 而且链表的头部是高位,和上面的博客题目是有点不同,但是我们不能使用翻转链表,可以使用栈先进后出的思想达到链表的翻转.
代码
public ListNode addTwoNumbers(ListNode l1, ListNode l2) { Stack<Integer> stack1=new Stack(); Stack<Integer> stack2=new Stack(); ListNode node1=l1; while(node1!=null){ stack1.push(node1.val); node1=node1.next; } ListNode node2=l2; while(node2!=null){ stack2.push(node2.val); node2=node2.next; } ListNode head=null; int flag=0; while(!stack1.isEmpty()||!stack2.isEmpty()||flag!=0){ int value=0; if(!stack1.isEmpty()) value+=stack1.pop(); if(!stack2.isEmpty()) value+=stack2.pop(); value+=flag; ListNode node=new ListNode(value%10); flag=value/10; node.next=head; head=node; } return head; }
结果