資料結構 基於單向鍊錶的回文字串判斷

2021-10-08 19:22:49 字數 1147 閱讀 6256

學習了極客時間王錚老師的《資料結構與演算法之美》中《06 | 鍊錶(上):如何實現lru快取淘汰演算法?》,課後思考留了一道演算法題,

給定乙個字串,判斷是否是回文字串,而且呢,這個字串不是普通的字串,字串中各個字元是以單向鍊錶的資料結構首尾相連,看起來像下面這樣:1 -> 2 -> 3 -> 0 -> 3 -> 2 -> 1,我們來一起看下這個演算法可以如何實現。

這裡介紹一種快慢指標的方法(所謂快慢指標,說白了就是兩個變數而已)。

開始時,快慢指標都指向頭結點,然後從頭結點開始,,快指標每次走兩步,慢指標每次走一步。

對於乙個長度為奇數的鍊錶,當快指標走到尾結點時,慢指標剛好走到這個鍊錶最中間的那個節點。從頭結點開始,慢指標走過的節點next引用都反轉方向,指向之前指向自己的那個節點。然後從中間向兩側開始逐節點對比,一直對比到頭尾節點,如果每次對比,內容都相同,則說明是乙個回文字串。

這裡,我沒加注釋,上面已經**講解的很詳細了。

package org.xueliang.algorithm.linkedlist;

/** * @author xueliang

* @since 2020-07-25 00:01

*/public class palindrome

if (fast != null)

boolean ispalindrome = true;

while (pre != null)

pre = pre.next;

slow = slow.next;

}system.out.println("是否是回文字串:" + ispalindrome);

}static class node

private string text;

private node next;

@override

public string tostring() ";}}

}

負載均衡演算法之一致性 hash 演算法實現

負載均衡演算法之加權輪詢演算法實現

資料結構 單向鍊錶

鍊錶結構的資料格式儲存 include stdafx.h 把這行放在最開始。include includeusing namespace std typedef struct data typedef struct node 這裡與上面的不同是多了node,注意如果沒有這個node,下面的struc...

資料結構(單向鍊錶)

ifndef linklist h define linklist h 鍊錶節點 template class linklistdata linklistdata linklistdata 獲取資料 t getdata public t data 資料 template class linklist...

資料結構 單向鍊錶

錯誤 h next null 或其他 讓指標指向空 的語句執行報錯 null undeclared identifier cannot convert from int to struct node 原因 未引入標頭檔案 include stdio.h 把null定義為乙個空位址是在 stdio標頭...