博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重复习简单基础算法(四):两数之和
阅读量:3919 次
发布时间:2019-05-23

本文共 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/

你可能感兴趣的文章
Maven中央仓库发布历程
查看>>
springBoot的过滤器,监听器,拦截器
查看>>
树状数组入门(简单的原理讲解)
查看>>
程序员的迷茫,迷茫的程序员
查看>>
datawhale课程[动手学数据分析]——Task01:数据加载及探索性数据分析
查看>>
datawhale课程[动手学数据分析]——Task02:数据清洗简述
查看>>
《统计学习方法第二版》学习笔记2——感知机
查看>>
《统计学习方法第二版》学习笔记3——K近邻法
查看>>
MySQL: win10安装MySQL 8.0.21成功记录【转载】
查看>>
IT从业者的迷思与求解之道——座谈会实录摘选
查看>>
程序员过关斩将--数据库的乐观锁和悲观锁并非真实的锁
查看>>
被忽略的TraceId,可以用起来了
查看>>
[原]调试PInvoke导致的内存破坏
查看>>
【NServiceBus】什么是Saga,Saga能做什么
查看>>
ASP.NET Core 集成测试中模拟登录用户的一种姿势
查看>>
程序员修神之路--容器技术为什么会这么流行(记得去抽奖)
查看>>
[ASP.NET Core 3框架揭秘] 异步线程无法使用IServiceProvider?
查看>>
.NET Core 3.0之深入源码理解HealthCheck(一)
查看>>
收藏!推荐12个超实用的Visual Studio插件
查看>>
2020年你应该学习 .Net Core
查看>>