题目
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
分析
正常遍历俩个链表即可,需要处理俩位相加超过10的进位
public class LinkNode {
int val;
LinkNode next;
public LinkNode(int data) {
this.val = data;
this.next = null;
}
}
public class LinkList {
LinkNode head;
public LinkList() {
this.head = null;
}
public LinkNode getHead() {
return this.head;
}
//添加元素
public void addNode(int data) {
LinkNode node = new LinkNode(data);
if (this.head == null) {
this.head = node;
} else {
LinkNode cur = this.head;
while(cur.next != null) {
cur = cur.next;
}
cur.next = node;
}
}
//正序打印
public void print(LinkNode node) {
while(node != null) {
System.out.print(node.val);
System.out.print(" ");
node = node.next;
}
System.out.println();
}
public void add(LinkNode node1,LinkNode node2) {
int count = 0;
int data = 0;
LinkNode newHead = new LinkNode(0);
LinkNode move = new LinkNode(0);
while(node1 != null || node2 != null) {
if(node1 != null && node2 != null) {
data = node1.val + node2.val + count;
} else if(node1 != null) {
data = node1.val + count;
} else {
data = node2.val;
}
LinkNode tmp = null;
if(data >= 10) {
tmp = new LinkNode(data % 10);
count = data / 10;
} else {
tmp = new LinkNode(data);
count = 0;
}
if(newHead.next == null) {
newHead.next = tmp;
}
move.next = tmp;
move = move.next;
if(node1 != null) {
node1 = node1.next;
}
if(node2 != null) {
node2 = node2.next;
}
}
if(count > 0) {
move.next = new LinkNode(count);
}
print(newHead.next);
}
}
public class addTwoNumbers {
public static void main(String[] args) {
LinkList list = new LinkList();
list.addNode(9);
list.addNode(9);
list.addNode(9);
list.addNode(9);
list.addNode(9);
list.addNode(9);
list.addNode(9);
LinkList lista = new LinkList();
lista.addNode(9);
lista.addNode(9);
lista.addNode(9);
lista.addNode(9);
list.add(list.getHead(),lista.getHead());
}
}