請判斷乙個鍊錶是否為回文鍊錶。
示例 1:
輸入:1->2輸出:false示例 2:
輸入:1->2->2->1輸出:true高階:
你能否用 o(n) 時間複雜度和 o(1) 空間複雜度解決此題?
143.重排鍊錶
206.反轉鍊錶
876.鍊錶的中間結點
1.使用快慢指標找到鍊錶的中點,將鍊錶分成前後兩部分
2.將後半部分鍊錶反轉
3.對比前部分和反轉的後部分,相等則是回文鍊錶
struct listnode
listnode
(int x)
:val
(x),
next
(nullptr)}
;class
solution
listnode* slow = head;
listnode* fast = head;
while
(fast-
>next && fast-
>next-
>next)
listnode* l1 = head;
listnode* l2 = slow-
>next;
slow-
>next =
nullptr
; l2 =
reverselinkedlist
(l2)
;//反轉後半部分鍊錶
return
isequal
(l1,l2)
;//判斷是否為回文鍊錶
}bool
isequal
(listnode* a, listnode* b)
a = a-
>next;
b = b-
>next;
}return
true;}
listnode*
reverselinkedlist
(listnode* head)
return pre;}}
;
實現鍊錶逆序,空間複雜度為O(1)
乙個演算法的空間複雜度只考慮在執行過程中為區域性變數分配的儲存空間的大小,它包括為參數列中形參變數分配的儲存空間和為在函式體中定義的區域性變數分配的儲存空間兩個部分。include using namespace std struct linknode linknode reverselink li...
最小棧O 1 空間複雜度實現
設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。常見的一道題目,很多解答都是兩個棧的做法,這裡提供一下o 1 空間複雜度的做法。使用兩個棧的原因是,我...
刪除鍊錶結點(時間複雜度為O 1 ))
題目 給定鍊錶的頭指標和乙個結點指標,在o 1 時間刪除該結點。鍊錶結點的定義如下 struct listnode 函式的宣告如下 void deletenode listnode plisthead,listnode ptobedeleted 分析 這是一道廣為流傳的google面試題,能有效考察...