學習了極客時間王錚老師的《資料結構與演算法之美》中《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標頭...