public class SingleLinkList {
private static class Data{
private int obj;
private Data next;
Data() {
}
Data(int obj){
this.obj = obj;
}
public void display() {
if (this==null) {
System.out.println("empty!!");
}
Data current = this;
while (current!=null) {
System.out.print(current.obj+" -> ");
current = current.next;
}
System.out.println();
}
public void insertLast(int obj) {
Data data = new Data(obj);
if(this.obj==0){
this.obj = obj;
return; /*由于每次是增加一个节点,所以对头结点进行初始化之后就要退出函数*/
}
Data last = this; /*一般一个链表的头结点是不能动的,因此需要把头结点赋值给一个临时变量
这样在对链表进行访问的时候,就可以用这个临时变量进行逐个的访问,不对头结点产生影响*/
while(last.next!=null){
last = last.next;
}
last.next = data;
}
}
private static Data addTwoLinkData(Data data1,Data data2) {
if (data1==null||data2==null) {
return null;
}
//保存节点返回用
Data data3 = new Data();
int flag = 0;
int sum = 0;
while (data1!=null&&data2!=null) {
sum = data1.obj+data2.obj;
if (sum<10) {
if (flag==1) {
if (sum+1==10) {
flag = 1;
data3.insertLast(sum+1-10);
}else{
flag = 0;
data3.insertLast(sum+1);
}
}else{
flag = 0;
data3.insertLast(sum);
}
}
if (sum>=10) {
if (flag==1) {
data3.insertLast(sum+1-10);
}else{
data3.insertLast(sum-10);
}
flag = 1;
}
data1 = data1.next;
data2 = data2.next;
}
if (data1==null&&data2!=null) {
if (flag==1) {
int s = data2.obj+1;
if (s<10) {
flag=0;
data3.insertLast(s);
}else{
flag = 1;
data3.insertLast(s-10);
}
}else{
data3.insertLast(data2.obj);
}
}
if (data2==null&&data1!=null) {
if (flag==1) {
int s = data1.obj+1;
if (s<10) {
flag=0;
data3.insertLast(s);
}else{
flag = 1;
data3.insertLast(s-10);
}
}else{
data3.insertLast(data1.obj);
}
}
//最后一位有进位,创建一个新节点
if (flag==1) {
data3.insertLast(1);
}
return data3;
}
public static void main(String[] args) {
//测试程序,链表1:1->8->3->6,链表2:1->2->3->4
Data data1 = new Data();
data1.insertLast(1);
data1.insertLast(8);
data1.insertLast(6);
data1.insertLast(6);
data1.display();
Data data2 = new Data();
data2.insertLast(1);
data2.insertLast(2);
data2.insertLast(3);
//data2.insertLast(3);
data2.display();
Data data3 = new Data();
data3 = addTwoLinkData(data1, data2);
//打印我们返回的链表结果
data3.display();
}
}