本文共 3877 字,大约阅读时间需要 12 分钟。
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 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); } } }}
心得:很简单。这道题。超级简单。思维方式也很简单,就是要做的东西可能稍微过多!!!务必多点思考即可
转载地址:http://bctrn.baihongyu.com/