回文チェーンテーブル(C言語)
1007 ワード
1.テーマ
チェーンテーブルが返信チェーンテーブルであるかどうかを判断してください.
例1:
入力:1->2出力:false例2:
入力:1->2->2->1出力:trueステップ:O(n)時間複雑度とO(1)空間複雑度でこの問題を解決できますか?
構想
1.チェーンテーブルのポイントを見つけるには、まず、高速と低速の2つのポインタを使用します.2.チェーンテーブルの後半を反転し、反転後の後半をチェーンテーブルの前半と比較する.
コード#コード#
チェーンテーブルが返信チェーンテーブルであるかどうかを判断してください.
例1:
入力:1->2出力:false例2:
入力:1->2->2->1出力:trueステップ:O(n)時間複雑度とO(1)空間複雑度でこの問題を解決できますか?
構想
1.チェーンテーブルのポイントを見つけるには、まず、高速と低速の2つのポインタを使用します.2.チェーンテーブルの後半を反転し、反転後の後半をチェーンテーブルの前半と比較する.
コード#コード#
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
bool isPalindrome(struct ListNode* head) {
if(head==NULL) return true;
struct ListNode *fast,*slow,*p,*q,*temp=NULL;
fast=slow=head;
while(fast->next && fast->next->next){
fast=fast->next->next;
slow=slow->next;
}
slow=slow->next;
while(slow!=NULL){
p=slow;
slow=slow->next;
p->next=temp;
temp=p;
}
while(temp!=NULL){
if(temp->val!=head->val){
return false;
}
temp=temp->next;
head=head->next;
}
return true;
}