导读:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
public class ListNode {
private Integer data;
private ListNode next ;
public ListNode getNext() {
return next;
}
public void setNext(ListNode next) {
this.next = next;
}
public Integer getData() {
return data;
}
public void setData(Integer data) {
this.data = data;
}
@Override
public String toString() {
String str = "";
if(next == null){
return data + "->";
}
else{
return data + "->" + next;
}
}
}
public class ListNodePrint {
private static ListNode l3 = new ListNode();
private static ListNode test = new ListNode();
private static ListNode last = new ListNode();
private static int sum = 0;
private static int ok = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] n = {3,4,2};
int [] m = {4,8,5};
ListNode l1 = new ListNode();
ListNode l2 = new ListNode();
for(int i = n.length-1; i>=0;i--){
Insert(l1,n[i]);
}
for(int i = m.length-1; i>=0;i--){
Insert(l2 ,m[i]);
}
System.out.println(l1);
System.out.println(l2);
addTwoNumbers(l1,l2,l3);
// System.out.println(l3);
deal(l3,test);
// System.out.println(test);
// System.out.println(ok);
/**
* int []p = new int [ok];
*/
int []lis = new int[ok];
findLastData(test,lis,ok);
for(int i = ok-1; i >= 0;i--){
Insert(last,lis[i]);
}
System.out.println(last);
}
/**
* 这个将数据插入链表中
* @param l1
* @param n
*/
public static void Insert(ListNode l1,int n){
if(l1.getData() == null){
l1.setData(Integer.valueOf(n));
}
else{
if(l1.getNext() == null){
ListNode l = new ListNode();
l1.setNext(l);
}
Insert(l1.getNext(),n);
}
}
/**
* 将两个链表倒序相加
* @param l1
* @param l2
* @return
*/
public static void addTwoNumbers(ListNode l1, ListNode l2,ListNode l3) {
if(l1.getData()!=null && l2.getData()!=null){
if(l3.getData() == null){
l3.setData(l1.getData()+l2.getData());
if(l1.getNext()!=null && l2.getNext()!=null){
addTwoNumbers(l1.getNext(),l2.getNext(),l3);
}
}
else{
if(l3.getNext() == null){
ListNode l = new ListNode();
l3.setNext(l);
}
addTwoNumbers(l1,l2,l3.getNext());
}
}
}
private static boolean flag = false;
public static void deal(ListNode l,ListNode l1){
if(l.getData()!=null){
if(l1.getData() == null){
if(l.getNext()!=null){
if(l.getNext().getData()>=10 ){
l1.setData(l.getData()+1); //如果小于10
ok++;
if(l.getNext()!=null){
deal(l.getNext(),l1);
}
flag =true;
}
else{
if(flag = true){
l1.setData(l.getData()-10);
ok++;
}
else{
l1.setData(l.getData());
ok++;
}
flag = false;
if(l.getNext()!=null){
deal(l.getNext(),l1);
}
}
}
else{
if(l.getData()!=null){
l1.setData(l.getData());
ok++;
}
}
}
else{
if(l1.getNext() == null){
ListNode mo = new ListNode();
l1.setNext(mo);
}
deal(l,l1.getNext());
}
}
}
public static void findLastData(ListNode l,int[]lis,int data){
if(l.getData()!=null){
lis[sum] = l.getData();
sum++;
if(sum < ok){
findLastData(l.getNext(),lis,data);
}
}
}
}
心得:很简单。这道题。超级简单。思维方式也很简单,就是要做的东西可能稍微过多!!!务必多点思考即可