[LeetCode][2]Add Two Numbers解析 -Java实现

Q:

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

A:

以下解法和代码没有借阅以往任何资料,如果有更好的解法请在评论区留言

他的意思大致是给你两个非负数链表,每个链表代表一个数字,这个数字的每一位都倒叙排列并每个节点含有一个数字,把两个数字相加并返回链表。

无非就是把两个连接相加一下,其中可能牵扯到进位的问题,也是在链表的结尾处进位,本身也没有什么好优化的点。但是有两种解决问题的办法。

1、把链表转化成long相加之后再转化成链表

2、在链表的基础上做相加

我认为1之间做了太多无谓的转换比较浪费时间直接做2,2中又可以划分为:

1、把链表中倒叙的数字正过来

2、直接改变数字的进位效果,向后进位。

我选择了2因为效率高啊,代码如下:

public class AddTwoNumbers {
	public static void main(String[] args){
		LinkedList link1 = new LinkedList();
		link1.addLast(1);
		link1.addLast(2);
		LinkedList link2 = new LinkedList();
		link2.addLast(1);
		link2.addLast(9);
		link2.addLast(2);
		LinkedList resultLink = addTwoNumbers(link1, link2);
		for(Object i : resultLink){
			System.out.println(""+(int)i);
		}
		
	}
	public static LinkedList addTwoNumbers(LinkedList link1,LinkedList link2){
		int maxLength = 0;
		int minLength = 0;
		LinkedList resultLink = null;//结果链表
		int carry = 0;
		if(link1.size()>link2.size()){
			resultLink = link1;
			maxLength = link1.size();
			minLength = link2.size();
		}
		else {
			resultLink = link2;
			maxLength = link2.size();
			minLength = link1.size();
		}
		for(int i =0;i=10){//进位
				carry = (int)result/10;
				if(i==minLength-1){//超出了链表长度
					if(i


你可能感兴趣的:(LeetCode,LeetCode)