鏈表迴文

題目描述:對於一個鏈表,請設計一個時間複雜度爲O(n),額外空間複雜度爲O(1)的算法,判斷其是否爲迴文結構。給定一個鏈表的頭指針A,請返回一個bool值,代表其是否爲迴文結構。保證鏈表長度小於等於900。測試樣例:1->2->2->1返回:true

分析:使用一個棧來存儲鏈表數據,然後再比較棧數據和鏈表數據的值是否相等。用s.top()取棧頂元素,用s.pop()刪除棧頂元素。

(1)棧模板類的使用stack 模板類的定義在<stack>頭文件中stack 模板類需要兩個模板參數,一個是元素類型,一個容器類型,但只有元素類型是必要的,在不指定容器類型時,默認的容器類型爲deque。

定義stack的代碼如下

stack<int> s1;stack<string> s2;


stack的基本操作如下:

入棧,如例:s.push(x);

出棧,如例:s.pop(); 注意出棧只是刪除棧頂元素,並不返回棧頂元素

訪問棧頂,如例:s.top(); 返回棧頂元素

判斷棧空,如例:s.empty(),當棧空時,返回true。

訪問棧中的元素個數,如例:s.size()

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:
    bool chkPalindrome(ListNode* A) {       
        // write code here
        stack<int> B;
        ListNode* p=A;
        while(A!=NULL)
            {
            B.push(A->val);
            A=A->next;
        }
        while(p!=NULL)
            {
            if(p->val !=B.top())
                return false;
            else
            { 
                B.pop();
                p=p->next;
            }
               
               
        }
        return true;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章