C C 之判斷鍊錶是否是回文鍊錶

2021-10-05 13:28:41 字數 2266 閱讀 9295

判斷鍊錶是否是回文鍊錶主要通過判斷對應位置的元素值是否是相等的
第一種解法:將原有鍊錶反轉獲取新的鍊錶,與原有的鍊錶比較,判斷對應元素的值是否相等

#include

using

namespace std ;

struct node

;typedef

struct node *plist;

typedef

struct node node;

plist createlist_link()

void

inserttail

(plist llist,

int x)

else

} tail-

>next=temp;

}void

inserthead

(plist llist,

int x)

void

printlist_link

(plist head)

cout<}plist reverselist_link

(plist head)

return copy;

}int

main()

; plist head=

createlist_link()

;for

(int i=

0;i<

6;i++

) plist copy=

reverselist_link

(head)

;for

(plist p=head-

>next,q=copy-

>next;p!=

null

;p=p-

>next,q=q-

>next)}if

(flag)

cout<<

"yes"

;else

cout<<

"no"

;//end

return0;

}

第二種解法:借助棧結構和雙指標,乙個指標的位移為1並將此時訪問的元素放到棧中,另乙個指標的位移為2,當位移為2的指標到達末尾時,位移為1的指標到達鍊錶中間位置。此後將棧中元素與鍊錶中元素值比對

#include

#include

using

namespace std ;

struct node

;typedef

struct node *plist;

typedef

struct node node;

plist createlist_link()

void

inserttail

(plist llist,

int x)

else

} tail-

>next=temp;

}void

printlist_link

(plist head)

cout<}int

main()

; plist head=

createlist_link()

;for

(int i=

0;i<

7;i++

)//end

stack<

int> s;

plist n1=head-

>next,n2=head-

>next-

>next;

while

(n2!=

null

&&n2-

>next!=

null)if

(n2!=

null

&&n2-

>next==

null

)else

if(n2==

null

)while

(n1!=

null

) s.

pop();

n1=n1-

>next;}if

(flag)

cout<<

"yes"

;else

cout<<

"no"

;return0;

}

顯然,第一種做法需要需要新的鍊錶,第二種方法借助棧結構,但是使用雙指標是在太雞肋,雖然思路挺好,但是實現太比較麻煩,如果想使用棧結構,可以先將鍊錶全部元素都壓入棧中,再重新遍歷比較。

如何判斷鍊錶是否是回文

回文,英文palindrome,指乙個順著讀和反過來讀都一樣的字串,比如madam 我愛我,這樣的短句在智力性 趣味性和藝術性上都頗有特色,中國歷史上還有很多有趣的回文詩。那麼,我們的第乙個問題就是 判斷乙個字串是否是回文?同時從字串頭尾開始向中間掃瞄字串,如果所有字元都一樣,那麼這個字串就是乙個回...

鍊錶逆序 判斷鍊錶是否回文

1.具有煉表頭的單鏈表 假設需要逆序的單鏈表為 則逆序以後的鍊錶為 過程 1 取p1指向header next p1 stu next p2保留p1 next p2 p1 next 將p1 next置為null,因為單鏈表逆序以後,當前的p1節點為尾節點 p1 next null 2 取p3保留p2...

判斷鍊錶是否回文?

given a singly linked list,determine if it is a palindrome.思路 兩個指標,乙個正常遞推,另乙個遞推速度為第乙個的兩倍 node.next.next 到末,分兩種情況 1.奇數個元素,最後快指標指向最後乙個元素 p2.next null 2....