判斷單鏈表是否為回文,快慢指標和棧

2021-10-07 07:58:16 字數 1373 閱讀 5812

判斷單鏈表是否為回文,快慢指正加棧的方式解決

首先輸入這個鍊錶的長度,然後用尾插的方式,初始化鍊錶。接下來用快慢指標。

快指標每次走兩步,慢指標每次走一步,當快指標的next為null時(也就是快指標走到了最後乙個),那麼慢指標剛好就在中間,因為鍊錶沒有環,所以將鍊錶的情況分為奇數和偶數兩種情況。當長度為奇數時,快指標第一步就走兩步,慢指標第一步就走一步,當長度為偶數時,快指標第一步走一步,慢指標第一步不動。兩種情況也就第一步不同,其餘步數都相同。直到快指標走到末尾為止。

#include

#include

typedef

struct _node

node;

node* p;

//快指標

node* q;

//慢指標

node* r;

//記錄鍊錶的末尾

int a[

101]

;//用棧的形式,存放鍊錶的後半段

int m,m3;

//m表示輸入的數是奇數還是偶數,m3表示陣列a中存放的數字的個數

node*

initialization

(int num, node* head)

//鍊錶初始化,再加上新增鍊錶長度

s->data = num;

s->next =

null

; r->next = s;

r = s;

return head;

}node*

pjring

(node* p, node* head)

//快if

(p->next->next ==

null

) p = p->next->next;

return p;

}node*

**ring

(node* q, node* head)

//慢else

}void

link

(node* q)

//將鍊錶的後半段壓入棧a中}}

intcompare

(node* p,

int m3)

//將鍊錶的前半段和棧a中的進行比較

p = p->next;

}return m3;

}int

main()

p = head;

q = head;

while(1

)}p = head;

m3 =

compare

(p,m3);if

(m3 ==-1

)else

return0;

}

判斷單鏈表是否有環(快慢指標)

方法一 使用p q兩個指標,p總是向前走,但q每次都從頭開始走,對於每個節點,看p走的步數是否和q一樣。如圖,當p從6走到3時,用了6步,此時若q從head出發,則只需兩步就到3,因而步數不等,出現矛盾,存在環。方法二 使用p q兩個指標,p每次向前走一步,q每次向前走兩步,若在某個時候p q,則存...

判斷是否為回文字串 棧 佇列 鍊錶 快慢指標

方法一 1.將字串按照使用者輸入的順序分別入棧和佇列 2.分別從佇列和棧中取出首個字元 3.比較取出的字元,若相等,繼續分別從佇列和棧中取首個字元 否則跳出迴圈,並設定標誌 flag 0 4.若佇列和棧中的字元取完,則結束,設定標誌flag 1 5.flag 1,表示字元從前往後和從後往前的序列完全...

快慢指標之判斷回 單鏈表

因為回 串是對稱的,所以正著讀和倒著讀應該是 樣的,這 特點是解決回 串問題的關鍵.這道題的關鍵在於,單鏈表 法倒著遍歷,法使 雙指標技巧。那麼最簡單的辦法就是,把原始鍊錶反轉存 條新的鍊錶,然後 較這兩條鍊錶是否相同。1 先通過 雙指標技巧 中的快慢指標來找到鍊錶的中點 slow fast hea...