opencart做外贸网站怎样/百度推广登陆首页
LeetCode445-两数相加
- 题干
- 解题思路
- 第一次代码逻辑、
- 二次改版代码
题干
进阶:
如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。
示例:
输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 8 -> 0 -> 7
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/
解题思路
有一说一,这个可比之前原版两数相加简单多了两整数之和
二进制的010101是真滴难受,首先我们先声明一个链表
然后…
main方法
public static void main(String[] args) {Solution solution = new AddTwoNumbersIi().new Solution();ListNode l1=new ListNode(7);l1.next=new ListNode(2);l1.next.next=new ListNode(4);l1.next.next.next=new ListNode(3);ListNode l2=new ListNode(5);l2.next=new ListNode(6);l2.next.next=new ListNode(4);ListNode listNode = solution.addTwoNumbers(l1, l2);System.out.println(listNode.toString());while (listNode != null) {System.out.print(" "+listNode.val);listNode=listNode.next;}}
第一次代码逻辑、
public ListNode addTwoNumbers1(ListNode l1, ListNode l2) {int num=0;ListNode ls=new ListNode(-1);ListNode sign=ls;while (l1 !=null || l2 != null){num+=l1 !=null?l1.val:0;num+=l2 !=null?l2.val:0;sign.next=new ListNode(num%10);sign=sign.next;num =num/10;l1=l1!=null?l1.next:null;l2=l2!=null?l2.next:null;}return ls.next;}
其实这里有个问题就是 博主默认的链表顺序是 3->4->2->7 给的顺序:( 7 -> 2 -> 4 -> 3)。美滋滋的写完代码提交LeetCode发现代码不对
二次改版代码
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {Deque<Integer> stack1 = new LinkedList<Integer>();Deque<Integer> stack2 = new LinkedList<Integer>();// 把L1、L2中的数字依次压入栈中while (l1 != null) {stack1.push(l1.val);l1 = l1.next;}while (l2 != null) {stack2.push(l2.val);l2 = l2.next;}System.out.println(stack1);System.out.println(stack2);Deque<Integer> stack3 = new LinkedList<Integer>();int num=0;ListNode ans=null;while (stack1.size() >0 || stack2.size()>0 || num>0){num+= stack1.isEmpty()? 0: stack1.poll();num+= stack2.isEmpty()? 0: stack2.poll();ListNode curnode = new ListNode(num%10);curnode.next = ans;ans = curnode;num =num/10;}return ans;}
群号java,架构交流群:809079777