本题考点
1.对于链表概念的理解
2.对于加法的理解
String n1s;
String n2s;
public int addTowNumber(int n1, int n2) {
// 获取当前最大整数的位数
int length = n1 > n2 ? String.valueOf(n1).length() :
String.valueOf(n2).length();
n1s = coverZero(String.valueOf(n1), length);
n2s = coverZero(String.valueOf(n2), length);
// 对每一个整数创建节点
NumNode node1 = createLinkList(0);
NumNode node2 = createLinkList(1);
StringBuilder sb = new StringBuilder();
// 是否进位
boolean isCarry = false;
for (int i = 0; i < length; i++) {
int num1 = node1.num;
int num2 = node2.num;
int num = num1 + num2;
if (isCarry) {
num += 1;
}
if (num >= 10) {
isCarry = true;
// 末尾 超过10直接加2位,需要反转,因为是结果是从个位开始存储
if (i == length - 1) {
StringBuilder tempSb = new StringBuilder();
tempSb.append(num);
String temp = tempSb.reverse().toString();
sb.append(temp);
} else {
sb.append(String.valueOf(num).charAt(1));
}
} else {
isCarry = false;
StringBuilder tempSb = new StringBuilder();
tempSb.append(num);
String temp = num >= 10 ? tempSb.reverse().toString() : num + "";
sb.append(temp);
}
node1 = node1.nextAddress;
node2 = node2.nextAddress;
}
System.out.print(sb.reverse().toString());
return Integer.valueOf(sb.reverse().toString());
}
public class NumNode {
public int num; //数据域
public NumNode nextAddress; // 下一个地址
}
// 根据位数补零
public String coverZero(String str, int length) {
int space = length - str.length();
if (space > 0) {
for (int i = 0; i < space; i++) {
str = "0" + str;
}
}
return str;
}
// 创建 链表
public NumNode createLinkList(int type) {
String targetStr = "";
if (type == 0) {
targetStr = n1s;
} else {
targetStr = n2s;
}
NumNode node1 = new NumNode();
// char 不能直接用Integer转换,因为会直接转换成 ascii
node1.num = Integer.valueOf(String.valueOf(targetStr.charAt(targetStr.length() - 1)));
// 上一个节点
NumNode lastNode = node1;
// 从第二个节点开始,因为第一个节点没有上一个节点
for (int i = targetStr.length() - 2; i >= 0; i--) {
// 上一个节点连接到当前节点就算是组成了链表
String str = String.valueOf(targetStr.charAt(i));
NumNode temp = new NumNode();
temp.num = Integer.valueOf(str);
lastNode.nextAddress = temp;
lastNode = temp;
}
return node1;
}