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)

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。