合并两个有序链表:
PHP 20ms:
最基本的数据结构操作,这里涉及了一个知识点,深拷贝和浅拷贝。PHP中的对象赋值为浅拷贝,即地址传递。首先新声明一个空单链表$new,把$new浅拷贝给$curr,然后循环判断两个链表的val值大小,如果$l1小于$l2,把$curr->next赋值为$l1,然后把$l1赋值给$curr(意思就是是curr指向l1),然后使$l1指向$l1->next.。以此类推。时间复杂度为O(S),空间复杂度为O(S)。
/**
* Definition for a singly-linked list.
* class ListNode {
* public $val = 0;
* public $next = null;
* function __construct($val) { $this->val = $val; }
* }
*/
class Solution {
function mergeTwoLists($l1, $l2) {
$new = new ListNode(0);
$curr = $new;
while($l1 != null && $l2 != null){
if($l1->val <= $l2->val){
$curr->next = $l1;
$curr = $curr->next;
$l1 = $l1->next;
}elseif($l1->val > $l2->val){
$curr->next = $l2;
$curr = $curr->next;
$l2 = $l2->next;
}
}
if($l1==null){
$curr->next = $l2;
}else{
$curr->next = $l1;
}
return $new->next;
}
}
本解法关键在于$new这个空链表。