题目链接
2. Add-Two-Numbers 难度:$\color{#00965e}{medium}$
知识点
1.数据结构单链表
数据结构根底,此处不赘述
2.链表尾插法
C 单链表头插法/尾插法/删除指定值结点
解法
简略累加
- 留心进位
- 用head记录头结点,head->next即题解须要的头结点
复杂度剖析
- 工夫复杂度:O(max(m,n)),其中 m,nm,n 为两个链表的长度。咱们要遍历两个链表的全副地位,而解决每个地位只须要 O(1)O(1) 的工夫。
- 空间复杂度:O(max(m,n)),答案链表的长度最多为较长链表的长度 +1+1。
以下为PHP语言实现~~~~
/** * Definition for a singly-linked list. * class ListNode { * public $val = 0; * public $next = null; * function __construct($val = 0, $next = null) { * $this->val = $val; * $this->next = $next; * } * } */class Solution { /** * @param ListNode $l1 * @param ListNode $l2 * @return ListNode */ function addTwoNumbers($l1, $l2) { $carry = 0; $tmp_int = 0; $head = new ListNode(); $end = new ListNode(); $end = $head; //$head = $end;//与下面的写法其实是一样的,这里的head是保留了头结点 while($l1 !=NULL || $l2!=NULL || $carry > 0){ if ($l1 != NULL){ $tmp_int += $l1->val; $l1 = $l1->next; } if ($l2 != NULL){ $tmp_int += $l2->val; $l2 = $l2->next; } $tmp_int += $carry; $node = new ListNode(); $node->val= $tmp_int%10; $carry = floor($tmp_int/10); $tmp_int = 0; $end->next= $node; $end = $node; } return $head->next; }}