leetcode 链表求和

题目: 给出两个非空的链表用来表示两个非负的整数,其中两个数字,按个位-十位-百位-千位…逆序存储
这两个数相加,得到一个新的链表表示他们的和。
例如:
输入:(1->2-4)+(8->1->2)
输出:9->3->6
分析思路: 【leetcode 链表求和】链表按位求和
需要考虑加法进位,相同位进位,最高位进位
相同长度链表、不同长度链表
代码:

package org.example.link; /** * 2-3-3 * 5-8-4 * 332+485=817 * * 332+85=417 * * 32+85=117 */ public class LinkAdd {public static Node add(Node nodeFirst,Node nodeSecond){ Node headNode = new Node(0); Node currNode = headNode; int carry = 0; while (nodeFirst!=null||nodeSecond!=null){ int x = (nodeFirst !=null) ? nodeFirst.value:0; //如果高位为空,则加0 int y = (nodeSecond !=null) ? nodeSecond.value:0; int sum = carry+x+y; //当前位相加,同时加上上一位的进位 int curr = sum%10; Node node = new Node(curr); carry = sum/10; currNode.next = node; currNode = node; if(nodeFirst!=null) nodeFirst = nodeFirst.next; if(nodeSecond!=null) nodeSecond = nodeSecond.next; } // 如果最高位求和还有进位 if(carry>0){ currNode.next = new Node(1); }return headNode; }public static void main(String[] args) {Node nodeFirst = new Node(2); nodeFirst.next=new Node(3); //nodeFirst.next.next=new Node(3); Node nodeSecond = new Node(5); nodeSecond.next=new Node(8); //nodeSecond.next.next=new Node(4); Node result = add(nodeFirst,nodeSecond); result= result.next; while (result!=null){ System.out.println(result.value); result = result.next; }} }package org.example.link; public class Node { int value; public Node(int i){ value = https://www.it610.com/article/i; } Node next; }

    推荐阅读