题意

image.png

解题思路:

思路:

  • 从低位到最高位,逐位相加,如果和大于等于10,则保留个位数字,同时向前进一位
  • 如果最高位有进位,则需在最前面补1
  • 时间复杂度是 O(n).

PHP 代码实现

  1. /**
  2. * Definition for a singly-linked list.
  3. * class ListNode {
  4. * public $val = 0;
  5. * public $next = null;
  6. * function __construct($val) { $this->val = $val; }
  7. * }
  8. */
  9. class Solution {
  10. /**
  11. * @param ListNode $l1
  12. * @param ListNode $l2
  13. * @return ListNode
  14. */
  15. function addTwoNumbers($l1, $l2) {
  16. $add = 0; //表示进位
  17. $head = new ListNode(0);//添加虚拟头结点,简化边界情况的判断
  18. $curr = $head;
  19. while ($l1 != null || $l2 != null || $add != 0) {
  20. $sum = $add;
  21. if ($l1 != null) {
  22. $sum += $l1->val;
  23. $l1 = $l1->next;
  24. }
  25. if ($l2 != null) {
  26. $sum += $l2->val;
  27. $l2 = $l2->next;
  28. }
  29. $curr->next = new ListNode($sum % 10);//如果最高位有进位,则需在最前面补1.
  30. $curr = $curr->next;
  31. $add = intval($sum / 10);
  32. }
  33. return $head->next;
  34. }
  35. }

GO 代码实现

  1. func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
  2. headList := new(ListNode)
  3. head := headList
  4. num := 0
  5. for (l1 != nil || l2 != nil || num > 0) {
  6. headList.Next = new(ListNode)
  7. headList = headList.Next
  8. if l1 != nil {
  9. num = num + l1.Val
  10. l1 = l1.Next
  11. }
  12. if l2 != nil {
  13. num = num + l2.Val
  14. l2 = l2.Next
  15. }
  16. headList.Val = (num) % 10
  17. num = num / 10
  18. }
  19. return head.Next
  20. }