美文网首页
判断回文链表

判断回文链表

作者: spurYin | 来源:发表于2017-05-07 23:43 被阅读0次
    <?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));
    

    相关文章

      网友评论

          本文标题:判断回文链表

          本文链接:https://www.haomeiwen.com/subject/utwptxtx.html