<?php
//创建链表类
class LinkList
{
public $val;
public $nextLink;//下一个节点
public function __construct($val){
$this->val=$val;
}
function appendToTail($i){
$newLink=new LinkList($i);
$current=$this;
while($current->nextLink != null){
$current=$current->nextLink;
}
$current->nextLink=$newLink;
}
}
class LinkListTest
{
//打印链表
function printLink($link){
while($link != null){
echo $link->val."->";
$link=$link->nextLink;
}
}
/**
*判断是否回文链表,翻转链表
*/
function isPalindrome($link){
if($link == null || $link->nextLink == null){
return $link;//true;//
}
$l1=null;
$l3=$link;
$l2=$link;
//取得长度
$length=0;
while($l3 != null){
$length++;
$l3=$l3->nextLink;
}
//遍历到中间,并将前半部分翻转
for($i=0;$i<($length/2);$i++){
$l3=$l2->nextLink;
$l2->nextLink=$l1;
$l1=$l2;
$l2=$l3;
}
if($length%2 ==1){
$l1=$l1->nextLink;
}
while($l1!=null && $l3!=null){
if($l1->val != $l3->val){
return false;
}
$l1=$l1->nextLink;
$l3=$l3->nextLink;
}
return true;
}
}
$list3=new LinkList(1);
$list3->appendToTail(2);
$list3->appendToTail(3);
$list3->appendToTail(2);
$list3->appendToTail(1);
$ll= new LinkListTest;
var_dump($ll->isPalindrome($list3));
网友评论