LeetCode-Add Two Numbers(链表相关问题)

原题为:
在这里插入图片描述

思路:

给你两个非空的链表代表两个非负整数。这个数字是被逆序排列的,每个节点中包含一个单一的数字。相加这两个数,用链表返回结果。

其实是:342+465=807

解这道题,需要注意以下几点:

(1)数字是被逆序排列的,所以进位是向右进的。

(2)需要考虑两个数字的位数不一样长,缺少的位数可以用0补全。

(3)当两个链表都为空时,是计算结束的条件。

代码:

package cn.edu.www;

public class  TestDemo{
	
	   class ListNode{
			int val;
			ListNode next;
			ListNode(int x){
				val=x;
			}
		}
	 
		public static void main(String[] args) {
			TestDemo addTwoNumbers=new TestDemo();
			ListNode p,l;
			ListNode l1=addTwoNumbers.new ListNode(2);
			ListNode l2 = addTwoNumbers.new ListNode(4); 
	        ListNode l3 = addTwoNumbers.new ListNode(3); 
	        ListNode l4 = addTwoNumbers.new ListNode(5); 
	        ListNode l5 = addTwoNumbers.new ListNode(6); 
	        ListNode l6 = addTwoNumbers.new ListNode(4); 
	        //第一个数
	        l1.next=l2;
	        l2.next=l3;
	        l3.next=null;
	        //第二个数
	        l4.next=l5;
	        l5.next=l6;
	        l6.next=null;
	        l=addTwoNumbers.addTwoNumbers(l1, l4);
	        for(p=l;p!=null;p=p.next)  
	            System.out.print(p.val);  
		}
		
		public ListNode addTwoNumbers(ListNode l1,ListNode l2){
			return helper(l1,l2,0);
		}
		
		public ListNode helper(ListNode l1,ListNode l2,int carry){
			if(l1==null&&l2==null){       //全部为null时,返回进位值
				return carry==0?null:new ListNode(carry);
			}
			if(l1==null&&l2!=null){       //位数不相等时,把缺少的位数补成零
				l1=new ListNode(0);
			}
			if(l1!=null&&l2==null){       //位数不相等时,把缺少的位数补成零
				l2=new ListNode(0);
			}
			//都不为null时,返回两个ListNode和进位相加的值
			int sum=l1.val+l2.val+carry;
			ListNode curr=new ListNode(sum%10);
			curr.next=helper(l1.next, l2.next, sum/10);
			return curr;
		}
	}

运行结果:

708

猜你喜欢

转载自blog.csdn.net/weixin_41550144/article/details/88878623