題目:編寫乙個函式,檢查輸入的鍊錶是否是回文的。
示例:
高階:你能否用 o(n) 時間複雜度和 o(1) 空間複雜度解決此題?
方法一:反轉鍊錶比較值
思路:1.計算鍊錶長度
2.翻轉前半部分鍊錶。
比如 1->2->3->3->2->1,將其翻轉為12->1。鍊錶長度為奇數時不用管最中間的那個節點。
3.從兩個子鍊錶的head開始,一一比較節點值,如果有不一樣,就返回false,全部一樣返回true
時間複雜度o(n),空間複雜度o(1)
public
boolean
ispalindrome
(listnode head)
//因為翻轉鍊錶時需要3個引用,所以對長度小於3的做特殊化處理。
if(length ==1)
return
true;if
(length ==2)
return head.val == head.next.val;
//2.翻轉前半部分鍊錶。
listnode pre = head;
listnode cur = head.next;
listnode next = head.next.next;
pre.next = null;
//翻轉鍊錶實際上就是把currrent節點裡的next引用指向pre指向的那個節點。。
//翻轉當前節點完畢後,把pre引用指向current,把current引用指向next,把next引用指向next.next,這樣就可以繼續翻轉下乙個節點了。
for(
int i =
1; i < length /
2; i++
)//翻轉完畢後,如果鍊錶長度為偶數,pre正好指向前半個鍊錶的表頭,cur正好指向後半個鍊錶的表頭
//如果鍊錶長度為奇數,pre指向前半個鍊錶的表頭,next指向後半個鍊錶的表頭,cur指向最中間的節點。
//所以把cur指向next的那個節點,奇偶兩種情況就可以共用下面的while迴圈了。
if(length %2!=
0) cur = next;
while
(pre != null && cur != null)
return
true
;}
練習之面試題。
今天繼續來做一些面試題鞏固自己所學的知識。1.將兩個鍊錶的值加起來求出新鍊錶。如 p1 1 2 3 4 5 6.p2 4 5 6 7 8 9.結果是 5 7 9 0 4 6.舉例 尾插函式。slistnode listpushback slistnode p1,int val while p3 pn...
Vue之面試題
1 說下vue資料雙向繫結的原理 2 說說vuex的作用以及應用場景 3 說說vue元件的資料通訊方式 4 vue的原始碼有看過嗎?說說vuex工作原理 5 為什麼說虛擬 dom會提高效能,解釋一下它的工作原理 6 請你詳細介紹一些 package.json 裡面的配置 7 為什麼說vue是一套漸進...
Java之面試題1
題 大廳裡有100盞燈,每盞燈都編了號碼,分別為1 100。每盞燈由乙個開關來控制。開關按一下,燈亮,再按一下燈滅。開關的編號與被控制的燈相同。開始時,燈是全滅的。現在按照以下規則按動開關。第一次,將所有的燈點亮。第二次,將所有2的倍數的開關按一下。第三次,將所有3的倍數的開關按一下。以此類推。第n...