当前位置: 面试刷题>> 链表求和Ⅰ (经典算法题500道)


题目描述补充

链表求和Ⅰ

给定两个非空链表,表示两个非负整数。数字按逆序方式存储在链表中,每个节点包含一个数字。将这两个数相加,并以相同的方式(即逆序)返回一个新的链表。

你可以假设除了数字0之外,这两个数字都不会以0开头。

示例

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807

PHP 示例代码

class ListNode {
    public $val = 0;
    public $next = null;

    function __construct($val = 0, $next = null) {
        $this->val = $val;
        $this->next = $next;
    }
}

function addTwoNumbers($l1, $l2) {
    $dummy = new ListNode(0); // 创建一个哑节点,方便操作
    $current = $dummy;
    $carry = 0; // 进位

    while ($l1 !== null || $l2 !== null || $carry > 0) {
        $x = ($l1 !== null) ? $l1->val : 0;
        $y = ($l2 !== null) ? $l2->val : 0;
        $sum = $x + $y + $carry;

        $carry = intdiv($sum, 10); // 获取进位
        $current->next = new ListNode($sum % 10); // 当前位的值
        $current = $current->next;

        if ($l1 !== null) {
            $l1 = $l1->next;
        }
        if ($l2 !== null) {
            $l2 = $l2->next;
        }
    }

    return $dummy->next; // 跳过哑节点,返回结果链表的头节点
}

Python 示例代码

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def addTwoNumbers(l1, l2):
    dummy = ListNode(0)
    current = dummy
    carry = 0

    while l1 or l2 or carry:
        x = l1.val if l1 else 0
        y = l2.val if l2 else 0
        sum = carry + x + y
        carry = sum // 10
        current.next = ListNode(sum % 10)
        current = current.next

        if l1:
            l1 = l1.next
        if l2:
            l2 = l2.next

    return dummy.next

JavaScript 示例代码

function ListNode(val, next) {
    this.val = (val===undefined ? 0 : val)
    this.next = (next===undefined ? null : next)
}

function addTwoNumbers(l1, l2) {
    let dummy = new ListNode(0);
    let current = dummy;
    let carry = 0;

    while (l1 !== null || l2 !== null || carry > 0) {
        let x = (l1 !== null) ? l1.val : 0;
        let y = (l2 !== null) ? l2.val : 0;
        let sum = carry + x + y;
        carry = Math.floor(sum / 10);
        current.next = new ListNode(sum % 10);
        current = current.next;

        if (l1 !== null) {
            l1 = l1.next;
        }
        if (l2 !== null) {
            l2 = l2.next;
        }
    }

    return dummy.next;
}

码小课网站中有更多相关内容分享给大家学习,包括算法进阶、数据结构深入等,希望大家都能成为算法高手!

推荐面试题