PHP單鏈表判斷回文字符串

1、背景

最近在學(xué)習(xí)王爭老師的數(shù)據(jù)結(jié)構(gòu)與算法之美,自己將課程中涉及的算法用PHP的形式表達(dá)出來,程序?qū)懙挠袉栴},歡迎留言溝通哦

2、單鏈表判斷回文字符串原理

核心(通過快慢指針定位中間節(jié)點(diǎn)),步驟,定義反轉(zhuǎn)鏈表,快慢指針, 慢指針每次前進(jìn)一步,快指針每次前進(jìn)兩步,到達(dá)中間位置后,慢指針與反轉(zhuǎn)鏈表對(duì)比,如果完全相等,則是回文字符串。

3、操作

PHP實(shí)現(xiàn)代碼

//單鏈表
class LinkedList{
    public $val;
    public $next;
    public function __construct($val)
    {
        $this->val = $val;
    }
}


class Test{
    public function isPalindromeStr(LinkedList $linkedList){
        if($linkedList == null || $linkedList->next == null){
            return true;
        }
        $strRev = null;//反轉(zhuǎn)鏈表
        $slow = $linkedList;//慢指針
        $fast = $linkedList;//快指針
        //快指針跑完鏈表跳出循環(huán)
        while ($fast != null && $fast->next != null){
            $fast = $fast->next->next;
            //慢指針數(shù)據(jù)反轉(zhuǎn)
            $next = $slow->next;
            $slow->next = $strRev;
            $strRev = $slow;
            $slow = $next;
        }
        //當(dāng)鏈表數(shù)據(jù)為奇數(shù)時(shí)的判斷
        if($fast != null){
            $slow = $slow->next;
        }
       //慢指針和反轉(zhuǎn)鏈表進(jìn)行判斷
        while ($slow != null){
            if($slow != $strRev){
                return false;
            }
            $slow = $slow->next;
            $strRev = $strRev->next;
        }

        return true;

    }
}

$linkedList[0] = new LinkedList(1);
$linkedList[1] = new LinkedList(2);
$linkedList[2] = new LinkedList(3);
$linkedList[3] = new LinkedList(3);
$linkedList[4] = new LinkedList(2);
$linkedList[5] = new LinkedList(1);

$linkedList[0]->next = $linkedList[1];
$linkedList[1]->next = $linkedList[2];
$linkedList[2]->next = $linkedList[3];
$linkedList[3]->next = $linkedList[4];
$linkedList[4]->next = $linkedList[5];

$test = new Test();

var_dump($test->isPalindromeStr($linkedList[0]));

4、源碼地址

https://gitee.com/ERWTWERWERWERWER/simple_small_algorithm/blob/master/algorithm/PalindromeString.php

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容