Leetcode练习-两个数字相加(Add two numbers)

题目要求:

给你两个非空链表,表示两个非负整数。数字以相反的顺序存储,每个节点包含一个数字。添加这两个数字并将其作为链接列表返回。

您可以假定这两个数字不包含任何前导零,除了数字0本身。

输入:(2→4→3)+(5→6→4)
 输出: 7→0→8
 说明: 342 + 465 = 807。

代码如下:

单链表类:

public class ListNode {
	int val;
	ListNode next;
	ListNode(int var){
		this.val = var;
	}
	public String toString(){
		ListNode l = this;
		String v = "["+val;	
		while(l.next!=null){
			v+=","+l.next.val;
			l = l.next;
		}
		return v+"]";
	}
}
实现测试类:

public class Test {
	public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		int l3 = 0;
		//记录两个链表中的数相加是否有进位
		int mark = 0;
		ListNode result = new ListNode(0);	
		//记录当前链表
		ListNode curr =result;
		//1、确定l1或l2中有值,如果都没有值,则结束运算
		while (l1 != null || l2 != null) {
			//2、如果有一个有值,则为另一个补值
			l1 =(l1 != null)?l1: new ListNode(0);
			l2 =(l2 != null)?l2: new ListNode(0);
			//3、进行相加求值,l3的范围(0,19)
			l3 = l1.val + l2.val + mark;
			//4、求出是否有进位,mark的范围(0,1)
			mark = l3/10;
			//5、求出该位的值
			curr.next = new ListNode(l3%10);
			//6、将curr向下移一位,l1和l2也移一位
			curr = curr.next;
			l1=(l1.next!=null)?l1.next:null;
			l2 = (l2.next!=null)?l2.next:null;
		}
		//若最后运算完毕,还有进位,则添加一位
		if(mark>0){
			curr.next = new ListNode(mark);
		}
		return result;
	}

	@org.junit.Test
	public void test() {
		ListNode l1 = new ListNode(2);
		l1.next = new ListNode(4);
		l1.next.next = new ListNode(3);
		ListNode l2 = new ListNode(5);
		l2.next = new ListNode(6);
		l2.next.next = new ListNode(4);
		ListNode node = addTwoNumbers(l1, l2);
		System.out.println(node.toString());
	}

}



你可能感兴趣的:(编程练习)