给定两个代表非负数的链表,数字在链表中是反向存储的(链表头结点处的数字是个位数,第二个结点上的数字是百位数...),求这个两个数的和,结果也用链表表示。
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出: 7 -> 0 -> 8
<?php
class Node {
public $next = null;
public $val;
public function __construct($val) {
$this->val = $val;
}
}
function addList($head1, $head2) {
$pre = null;
$nextVal = 0;
$returnNode = null;
while($head1 != null || $head2 !== null) {
if ($head1 != null && $head2 != null) {
$val = $head1->val + $head2->val + $nextVal;
$nextVal = intval($val / 10);
$node = new Node($val % 10);
if (is_null($pre)) {
$pre = $node;
$returnNode = $node;
} else {
$pre->next = $node;
$pre = $node;
}
$head1 = $head1->next;
$head2 = $head2->next;
} else {
if ($head1 == null) {
$val = $head2->val + $nextVal;
$nextVal = intval($val / 10);
$node = new Node($val % 10);
$pre->next = $node;
$pre = $node;
$head2 = $head2->next;
}
if ($head2 == null) {
$val = $head1->val + $nextVal;
$nextVal = intval($val / 10);
$node = new Node($val % 10);
$pre->next = $node;
$pre = $node;
$head1 = $head1->next;
}
}
}
return $returnNode;
}
$node1 = new Node(1);
$node2 = new Node(9);
$node3 = new Node(7);
$node1->next = $node2;
$node2->next = $node3;
$node4 = new Node(9);
$node5 = new Node(1);
$node4->next = $node5;
$ret = addList($node1, $node4);
while ($ret != null) {
print $ret->val;
$ret = $ret->next;
}