php执行的困惑
最近在用php语言实现各种数据结构算法排序,可以说是很蛋疼的一件事,最近遇到了一个问题,不知道是什么原因,姑且放到这里,希望能看到的人予以帮助
首先我用php写了这样一个类
class ListNode { private $val; private $next=null; function __construct($val) { $this->val=$val; } public function __get($propertyName){ return $this->$propertyName; } public function __set($name,$value){ $this->$name=$value; } }
然后是一个算法
1 function partitionLinkedList($head,$x){ 2 var_dump($head); 3 $dummy=new ListNode(0); 4 $pivot=new ListNode($x); 5 $first=$dummy; 6 $second=$pivot; 7 $curr=$head->next; 8 9 while ($curr!=null) { 10 // var_dump($curr); 11 $next=$curr->next; 12 echo $curr->val; 13 if($curr->val<$x){ 14 $first->next=clone $curr; 15 $first=$curr; 16 $first->next=null; 17 }else{ 18 $second->next=clone $curr; 19 $second=$curr; 20 $new2=new ListNode(100); 21 // $second->next=null; 22 $second->next=$new2; 23 } 24 echo "dummy"; 25 var_dump($dummy); 26 echo "pivot"; 27 var_dump($pivot); 28 $curr=$next; 29 } 30 $first->next=$pivot->next; 31 return $dummy; 32 } 33 34 $arr=array(4,3,2,1,2,5); 35 $L=new ListNode(0); 36 $L1=$L; 37 foreach ($arr as $nodeval) { 38 // echo $nodeval." "; 39 $new = new ListNode($nodeval); 40 // echo $new->val.‘ ‘; 41 $L1->next=$new; 42 $L1=$new; 43 // echo $L1->val; 44 // echo "<br/>"; 45 }
问题就出在第16行和第21行,下面是执行的截图
如图所示,当我将链表的next设置为null时,第一遍循环并没有将后续next变为null,却在第二遍循环以后将后续next变为null,不理解是为什么,所以发到这儿希望大家帮助,详细代码可以到我的github上下载(https://github.com/xzjs/interview_php/blob/master/t31.php)
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。