Leetcode 第2题 两数相加(Java实现)

Leetcode 第2题 两数相加(Java实现)

解题思路

刚刚学完韩顺平老师的《数据结构与算法》的链表部分,就来leetcode上找了一道题来练习。

  1. 首先定义一个ListNode的类,val用来存放整型数据,.next指向下一个节点;
  2. 再定义两个链表相加的函数,输入为链表l1和l2;
    2.1定义一个头节点head,它不用来存放数据,只是用于索引;
    2.2 定义一个类型为ListNode的中间变量temp,用来存放相加后的值;
    2.3 用carry来存两数相加时溢出的值;
    2.4 来一个while循环,循环终止条件是l1和l2都指向空节点;
    2.4.1 从第一个节点对l1和l2进行相加操作;
    2.4.2 逐个节点的对res进行赋值;
    2.5 退出循环后,看一下carry中是否还有值,有值的话继续给下一个res节点进行赋值;
  3. 完毕

代码实现

public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		ListNode head = new ListNode(0);
		ListNode res = head;
		int carry = 0;
		while (l1 != null || l2 != null) {
			if(l1 != null && l2 !=null) {
				int x = l1.val, y = l2.val;
				int sum = carry + x + y;
				carry = sum / 10;
				res.next =new ListNode(sum % 10);
				l1 = l1.next;
				l2 = l2.next;
			}else if(l1 != null) {
				int sum= carry +l1.val;
				carry=sum/10;
				res.next = new ListNode(sum%10);
				l1 = l1.next;
			}else {
				int sum = carry +l2.val;
				carry=sum/10;
				res.next = new ListNode(sum%10);
				l2 = l2.next;
			}
			
			res = res.next;
			
		}
		if(carry>0) {res.next = new ListNode(carry);}
		
		return head.next;
	}

你可能感兴趣的:(Leetcode 第2题 两数相加(Java实现))