給定乙個鍊錶的頭節點 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剛好走到了中間的位置,程式如下...