1. 程式人生 > >C# 寫 LeetCode Medium #2 Add Two Numbers

C# 寫 LeetCode Medium #2 Add Two Numbers

des list [] red nod return may elf tput

2. Add Two Numbers

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse orderand each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.


代碼:
static void Main(string[] args)
        {
            ListNode l1 = new ListNode(3);
            l1.next = new ListNode(6);
            l1.next.next = new ListNode(9);

            ListNode l2 
= new ListNode(7); l2.next = new ListNode(0); l2.next.next = new ListNode(3); var res= addTwoNumbers(l1, l2); while (res != null) { Console.Write(res.val); res = res.next; } Console.ReadKey(); }
public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; } } public static ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode l3 = new ListNode(0); ListNode head = l3; int sum = 0; while (l1 != null || l2 != null) { sum = sum > 9 ? 1 : 0; if (l1 != null) { sum += l1.val; l1 = l1.next; } if (l2 != null) { sum += l2.val; l2 = l2.next; } //存儲在l3中 l3.next = new ListNode(sum % 10); l3 = l3.next; } //判斷最後一項是否和大於9,大於則需要再添加一個1. if (sum > 9) { l3.next = new ListNode(1); } return head.next; }

解析:

輸入:ListNode類型的兩個參數

輸出:第一個節點。

思想:

  循環鏈表中的每一位,sum存儲兩個鏈表對應位上的和。通過觀察不難發現規律,如果上一位和大於9,則下一位初始sum為1,將結果存儲在新的鏈表中。

  最後一位上和大於9時,再多加一位,值為1。

時間復雜度:O(n)


 

C# 寫 LeetCode Medium #2 Add Two Numbers