链表类
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
头插法和尾插法
public class ListAdd {
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode sum = new ListNode();
ListNode newnode, tailNode;
sum = newnode = tailNode = null;
int a = 0;
int b = 0;
int carry = 0;
int sum1 = 0;
while (true) {
if(l1 != null && l2 != null){
a = l1.val;
b = l2.val;
newnode = new ListNode();
sum1 = a + b + carry;
//判定大小是否为两位数
if(sum1 > 9){
newnode.val = sum1 % 10;
carry = sum1 / 10;
}
else {
newnode.val = sum1;
carry = 0;
}
if(sum == null){
sum = tailNode = newnode;
}
else{
//将新节点连接到链表的头部
tailNode.next = newnode;
//head永远存储第一个节点的地址
tailNode = newnode;
}
l1 = l1.next;
l2 = l2.next;
}
else if (l1 != null) {
a = l1.val;
newnode = new ListNode();
sum1 = a + carry;
//判定大小是否为两位数
if(sum1 > 9){
newnode.val = sum1 % 10;
carry = sum1 / 10;
}
else {
newnode.val = sum1;
carry = 0;
}
if(sum == null){
sum = tailNode = newnode;
}
else{
//将新节点连接到链表的头部
tailNode.next = newnode;
//head永远存储第一个节点的地址
tailNode = newnode;
}
l1 = l1.next;
}
else if (l2 != null) {
b = l2.val;
newnode = new ListNode();
sum1 = b + carry;
//判定大小是否为两位数
if(sum1 > 9){
newnode.val = sum1 % 10;
carry = sum1 / 10;
}
else {
newnode.val = sum1;
carry = 0;
}
if(sum == null){
sum = tailNode = newnode;
}
else{
//将新节点连接到链表的头部
tailNode.next = newnode;
//head永远存储第一个节点的地址
tailNode = newnode;
}
l2 = l2.next;
}
else if(carry != 0) {
newnode = new ListNode();
sum1 = carry;
//判定大小是否为两位数
if(sum1 > 9){
newnode.val = sum1 % 10;
carry = sum1 / 10;
}
else {
newnode.val = sum1;
carry = 0;
}
if(sum == null){
sum = tailNode = newnode;
}
else{
//将新节点连接到链表的头部
tailNode.next = newnode;
//head永远存储第一个节点的地址
tailNode = newnode;
}
}
else {
break;
}
}
return sum;
}
public static void main(String[] args) {
ListNode newnode;
ListNode l1 = new ListNode();
ListNode l2 = new ListNode();
l1 = null;
l2 = null;
//链表头插法
for (int i = 2; i < 7; i+=2) {
//创建一个临时节点
newnode=new ListNode();
//为属性赋值
newnode.val = i;
//判断当前链表是否第一次赋值
if(l1 == null){
l1 = newnode;
}
else{
//将新节点连接到链表的头部
newnode.next = l1;
//head永远存储第一个节点的地址
l1 = newnode;
}
}
for (int i = 7; i > 4; i--) {
//创建一个临时节点
newnode=new ListNode();
//为属性赋值
newnode.val = i;
//判断当前链表是否第一次赋值
if(l2 == null){
l2 = newnode;
}
else{
//将新节点连接到链表的头部
newnode.next = l2;
//head永远存储第一个节点的地址
l2 = newnode;
}
}
addTwoNumbers(l1, l2);
}
}