1. 程式人生 > 其它 >LeetCode——Add Two Numbers

LeetCode——Add Two Numbers

題目:

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.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8

解題過程:

1、分析

本道題就是考查的是連結串列的操作,此處有兩個注意點:

  1. 連結串列的頭結點
  2. 進位(程式中的add變數)

2、思路

對連結串列1和連結串列2中的每個元素相加,取模(%)放入result連結串列中,除(/)放入add變數中,最終需要考慮是否add中還有值,這是進位。

程式程式碼

public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		ListNode l1_r = l1;
		ListNode l2_r = l2;

		ListNode result = null;// 作為返回值
		// 處理第一個結點
		int add = 0;// 進位
		int s = l1_r.val + l2_r.val + add;
		result = new ListNode(s % 10);
		add = s / 10;
		l1_r = l1_r.next;
		l2_r = l2_r.next;
		//上面的result作為頭結點的指標
		ListNode l3_r = result;//l3_r作為連結串列的指標遍歷
		while (l1_r != null || l2_r != null) {
			// 同時都不為null
			ListNode l3 = null;
			int sum = 0;
			if (l1_r != null && l2_r != null) {
				sum = l1_r.val + l2_r.val + add;
				l3 = new ListNode(sum % 10);
				add = sum / 10;
				// 後移
				l1_r = l1_r.next;
				l2_r = l2_r.next;
			} else if (l1_r != null && l2_r == null) {
				sum = l1_r.val + add;
				l3 = new ListNode(sum % 10);
				add = sum / 10;
				// 後移
				l1_r = l1_r.next;
			} else {
				sum = l2_r.val + add;
				l3 = new ListNode(sum % 10);
				add = sum / 10;
				// 後移
				l2_r = l2_r.next;
			}
			l3_r.next = l3;
			l3_r = l3_r.next;
		}
		//判斷最後的add
		/**
		 * 最後會有一種情況就是連結串列的計算都結束了,但是add中還有進位,此時要注意的是計算進位
		 */
		if (add != 0){
			ListNode last = new ListNode(add);
			l3_r.next = last;
		}
		return result;
	}