判斷鍊錶是否為回文結構

2021-09-06 15:29:24 字數 1170 閱讀 3936

給定乙個鍊錶的頭節點 head,請判斷該鍊錶是否為回文(正反結構相同)結構。如果鍊錶長度為 n,時間複雜度達到 o(n),額外空間複雜度達到 o(1)。

參考:《程式設計師**面試指南》

放入棧,時間複雜度o(n),空間複雜度o(n)

bool ispalindrome1

(node *head)

while

(null

!= head)

return true;

}

將右半部分放入棧,時間複雜度o(n),空間複雜度o(n)

bool ispalindrome2

(node *head)

//這裡right找到的是中間點(奇數為中間,偶數為右邊第乙個)

stack s;

while

(null

!= right)

//將右邊放入棧

while

(!s.

empty()

)return true;

}

這個方法真正實現要求。

將右半部分鍊錶反轉,與左邊部分進行比較,時間複雜度o(n),空間複雜度o(1)

//高階演算法

bool ispalindrome3

(node *head)

//這裡n1找到(奇數為中間,偶數為左邊最後乙個)

n2 = n1->next;

n1->next =

null

; node *n3 =

null

;while

(null

!= n2)

n3 = n1;

n2 = head;

bool res = true;

while

(null

!= n1 &&

null

!= n2)

n1 = n1->next;

n2 = n2->next;

} n1 = n3->next;

n3->next =

null

;while

(null

!= n1)

return res;

}

OJ 判斷鍊錶是否為回文結構

思路 先找到鍊錶的中間節點,然後將鍊錶從中間節點之後的後半段反轉 然後將前半段與後半段逐一進行比較。鍊錶的建立 struct listnode bool ispalindrome struct listnode head 將後半段進行反轉 struct listnode newhead null s...

判斷是否為回文結構

法一 棧 時間o n 空間o n public static boolean ispanlindrome node head second second.next second指向後半部分第乙個元素 stackstack new stack while second null while stack...

判斷鍊錶是否回文結構(c )

這是一道基礎的鍊錶知識,判斷鍊錶是否回文結構。在這裡我使用了快慢指標法。慢指標 p1每次走一步 p1 next 快指標 p1每次走兩步 p1 next next 主要想法 當p2走到末尾時,p1只走了整個行程的一半,只要將剩下部分逆序就可以進行判斷了 當p2為空時,p1剛好走到了中間的位置,程式如下...