leetcode2 add two numbers

      题目为把两个非负整数逆序存储在链表中,求和并返回一个链表。例如:234+126=360,在这个题目中即为

输入:4-->3-->2    6-->2-->1   输出:0-->6-->3

public class AddTwoNumbers {
	public static void main(String[] args) {
		ListNode l1=new ListNode(4);
		ListNode l2=new ListNode(3);
		ListNode l3=new ListNode(2);
		l1.next=l2;
		l2.next=l3;
		
		ListNode l4=new ListNode(6);
		ListNode l5=new ListNode(2);
		ListNode l6=new ListNode(1);
		l4.next=l5;
		l5.next=l6;
		
		AddTwoNumbers atn=new AddTwoNumbers();
		ListNode result=atn.addTwoNumbers(l1, l4);
		while(result!=null){
			System.out.print(result.val);
			result=result.next;
		}
	}
	
	public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
	    int s=0;    //保存每两个对应节点相加后的进位
	    int sum=0;   //保存每两个对应节点相加后的和
	    ListNode temp;   //每求出一个和,生成一个节点
	    ListNode result=null;     //保存最后求和结果的链表
	    ListNode pointer=null;     //结果链表中的指针,总是指向链表的最后一个节点
	    while(l1!=null || l2!=null || s!=0){   //l1不为空或l2不为空或者有进位时,求和都会继续
	    	if(l1==null && l2==null){
	    		sum=s;
	    	}else if(l1==null){
	    		sum=l2.val+s;
	    		l2=l2.next;
	    	}else if(l2==null){
	    		sum=l1.val+s;
	    		l1=l1.next;
	    	}else{
	    		sum=l1.val+l2.val+s;
		    	l1=l1.next;
		    	l2=l2.next;
	    	}
	    	
	    	if(sum>9){     //sum大于9,进位为1
	    		s=1;
	    		sum=sum%10;
	    	}else{
	    		s=0;
	    	}
	    	temp=new ListNode(sum);
	    	if(result==null){    //result为空,表示相加的是第一个节点
	    		result=temp;
	    		pointer=result;
	    	}else{               //result不为空,利用我们的指针,将求得的节点接在pointer后面,再将poiter指向最后加入的节点
	    		pointer.next=temp;
	    		pointer=pointer.next;
	    	}
	    }
	    return result;
	}
}

//链表中的每个节点
class ListNode{
	int val;
	ListNode next;
	public ListNode(int x){
		val=x;
		next=null;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值