LeetCode之面試題02 06回文鍊錶

2021-10-25 03:22:52 字數 1263 閱讀 5841

題目:編寫乙個函式,檢查輸入的鍊錶是否是回文的。

示例:

高階:你能否用 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...