回文チェーンテーブル(C言語)


1.テーマ
チェーンテーブルが返信チェーンテーブルであるかどうかを判断してください.
例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;
    
}