首页 > 代码库 > php执行的困惑

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)

php执行的困惑