public class LinkList<T> {
Node<T> head;
Node<T> tail;
Node<T> pre;
Node<T> next;
//头部添加
public void addFirst(T value) {
Node<T> node = new Node<>(value);
if(head == null) {
head = node;
tail = node;
}else {
head.pre = node;
node.next = head;
head = node;
}
}
//尾部添加
public void addLast(T value) {
Node<T> node = new Node<>(value);
if(tail == null) {
head = node;
tail = node;
}else {
tail.next = node;
node.pre = tail;
tail = node;
}
}
//头部弹出
public T popFirst() {
if(head !=null) {
Node<T> node = head;
head = head.next;
return node.value;
}else {
return null;
}
}
//尾部弹出
public T popTail() {
if(tail !=null) {
Node<T> node = tail;
tail = tail.pre;
return node.value;
}else {
return null;
}
}
}
public class LinkAdd {
/*
* 两个链表生成相加链表
* 假设表中每一个节点的值都在0-9之间,那么链表整体就可以代表一个整数
* 例如9>3>7,就可以代表937
* 给定两个这种链表的头节点head1和head2,请生成代表两个整数相加值的结果链表
* 例如:链表1为9>3>7,链表2为6>3,最后生成新的结果链表为1>0>0>0
*/
public static void main(String[] args) {
LinkList<Integer> L1 = new LinkList<>();//937
LinkList<Integer> L2= new LinkList<>();//63
L1.addLast(9);
L1.addLast(3);
L1.addLast(7);
L2.addLast(6);
L2.addLast(3);
LinkList<Integer> L3= new LinkList<>();
//只要有一个 列表是不为空就继续
int up = 0;
while(L1.tail!=null || L2.tail!=null) {
int l1 = 0;
int l2 = 0;
if(L1.tail !=null) {
l1 = L1.popTail();
}
if(L2.tail !=null) {
l2 = L2.popTail();
}
int total = l1 +l2 + up;
if(total >9) {
total -=10;
up = 1;
}else {
up = 0;
}
L3.addFirst(total);
}
if(up == 1) {//最高位可能越界
L3.addFirst(1);
}
while(L3.head !=null) {
System.out.print(","+L3.popFirst());
}
}
}