- Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
- code:
-
public ListNode AddTwoNumbers(ListNode l1, ListNode l2) { ListNode newNode = l2; ListNode tailNode = null; bool isNeedAddOne = false; while (l1 != null && l2 != null) { int tempVal = l1.val + l2.val; if (isNeedAddOne) { tempVal++; } isNeedAddOne = (tempVal >= 10)?true:false; l2.val = tempVal >= 10 ? tempVal - 10 : tempVal; l1 = l1.next; if (l2.next == null) { tailNode = l2; } l2 = l2.next; } if (l1 == null) { if (l2 == null) { if (isNeedAddOne) { ListNode tempNode = new ListNode(1); tailNode.next = tempNode; } } while (l2 != null && isNeedAddOne) { l2.val++; isNeedAddOne = false; if (l2.val >= 10) { l2.val -= 10; isNeedAddOne = true; } if (l2.next == null && isNeedAddOne) { ListNode tempNode = new ListNode(1); l2.next = tempNode; isNeedAddOne = false; } l2 = l2.next; } } else if (l2 == null) { tailNode.next = l1; while (l1 != null && isNeedAddOne) { l1.val++; isNeedAddOne = false; if (l1.val >= 10) { isNeedAddOne = true; l1.val -= 10; } if (l1.next == null && isNeedAddOne) { ListNode tempNode = new ListNode(1); l1.next = tempNode; isNeedAddOne = false; } l1 = l1.next; } } return newNode; }
- 代码思路:每个节点存一个0-9的数字,函数参数是2个节点,分别存着两个数的个位数字。对两个链表做一次等长遍历,每次把两个节点的数字相加,并把结果保存在L2节点中,如果L2链表比L1短,那么将会把之后L1的节点值更新为结果链表相应位的数字,并把L2的末尾节点的next连到L1某个节点上,如果最高位计算结果大于等于10,那么new一个节点作为结果链表的最高位。时间复杂度为O(n),空间复杂度为O(1)。