C# 寫 LeetCode Medium #2 Add Two Numbers
阿新 • • 發佈:2018-12-21
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