php实现合并两个排序的链表(很多情况下新建数组装东西比连东西逻辑快很多)($cur=$cur->next;的理解)
一、总结
$cur=$cur->next;这句话需要好好理解 指$cur的值现在等于$cur的next域的值,$cur的next域的值就是一个地址,指向的就是$cur的下一个节点 那整句话就是表示的是$cur的值就是下一个节点的地址值
这里出现了 $cur的值的$cur的next域的值,以及还有的$cur的val域的值,所以就出现了三个值
二、php实现合并两个排序的链表
题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
三、代码
代码一ac:直接用数组保存节点(很多情况下新建数组装东西比连东西逻辑快很多),因为这里数组里面装都是引用(地址),所以空间开销其实也没有大特别多
1 val = $x; 7 } 8 }*/ 9 //算法:直接用两个链表原来的节点连10 function Merge($pHead1, $pHead2)11 {12 $arr=array();13 while($pHead1&&$pHead2){14 if($pHead1->val<=$pHead2->val) { $arr[]=$pHead1; $pHead1=$pHead1->next;}15 else { $arr[]=$pHead2; $pHead2=$pHead2->next;}16 }17 while($pHead1){18 $arr[]=$pHead1; $pHead1=$pHead1->next;19 }20 while($pHead2){21 $arr[]=$pHead2; $pHead2=$pHead2->next;22 }23 for($i=0;$inext=$arr[$i+1];25 }26 $arr[count($arr)-1]->next=null;27 return $arr[0];28 }
代码二:
1 val = $x; 7 } 8 }*/ 9 //算法:直接用两个链表原来的节点连10 function Merge($pHead1, $pHead2)11 {12 $head=new ListNode(0);//多了一个head节点 //1、这里一定要初始化值,不然是错的13 $cur=$head;14 while($pHead1&&$pHead2){15 if($pHead1->val<=$pHead2->val) { $cur->next=$pHead1; $cur=$cur->next; $pHead1=$pHead1->next;} //2、$cur=$cur->next;这句话需要好好理解16 else { $cur->next=$pHead2; $cur=$cur->next; $pHead2=$pHead2->next;}17 }18 while($pHead1){19 $cur->next=$pHead1; $cur=$cur->next; $pHead1=$pHead1->next;20 }21 while($pHead2){22 $cur->next=$pHead2; $cur=$cur->next; $pHead2=$pHead2->next;23 }24 return $head->next;//因为多建了head这个头节点25 }