判断回文链表

<?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));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容