思路:1、先反转两个链表
2、循环相加,将结果%10的余位放在低位,结果的/10的结果放在高位;
3、最后逆序反转输出
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
代码实现:
public static void main(String[] args) {
Node n1 = new Node(1);
Node n2 = new Node(4);
Node n3 = new Node(3);
n1.next = n2;
n2.next = n3;
Node n4 = new Node(9);
Node n5 = new Node(5);
Node n6 = new Node(7);
n4.next = n5;
n5.next = n6;
Node node= addNode(n1,n4);
while (node!=null){
System.out.println(node.val);
node=node.next;
}
}
public static Node addNode(Node node1, Node node2) {
node1 = reverse(node1);
node2 = reverse(node2);
Node result = new Node(0);
Node temp=result;
int sum = 0;
while (node1 != null || node2 != null) {
int x = node1 == null ? 0 : node1.val;
int y = node2 == null ? 0 : node2.val;
sum= x + y+sum;
temp.next = new Node(sum % 10);
sum = sum / 10;
temp = temp.next;
if (node1 != null) {
node1 = node1.next;
}
if (node2 != null) {
node2 = node2.next;
}
}
if (sum > 0) {
temp.next = new Node(sum);
}
return reverse(result.next);
}
static class Node {
int val;
Node next;
public Node(int val) {
this.val = val;
}
}
public static Node reverse(Node node) {
if (node == null || node.next == null) {
return node;
}
Node pre = null;
Node next = null;
while (node != null) {
next = node.next;
node.next = pre;
pre = node;
node = next;
}
return pre;
}