面試題 02 06 回文鍊錶

2021-10-08 07:20:51 字數 1116 閱讀 7185

1.普通版

把鍊錶的每個值儲存在陣列中,然後從鍊錶兩端向中間挨個對比,如果有不等的,就返回false。

/**

* definition for singly-linked list.

* struct listnode ;

*/bool ispalindrome

(struct listnode* head)

//普通版

int len=0;

while

(begin)

int a[len]

; begin=head;

for(

int i=

0;i)for

(int i=

0, j=len-

1;i<=j;i++

,j--)}

return true;

}

2.高階版,用o(1)的空間複雜度和o(n)的時間複雜度

直覺告訴我可以用快慢指標,可是我還是沒想到怎麼搞。

要反轉鍊錶,注意在最後乙個whle中是判斷p,而不是slow,因為slow最終會是null,所以一定會返回true。

/**

* definition for singly-linked list.

* struct listnode ;

*/bool ispalindrome

(struct listnode* head)

//高階版

// 找到中間節點

while

(fast && fast->next)

// slow=slow->next;

// 反轉鍊錶

struct listnode* p=

null

;struct listnode* temp=

null

;while

(slow)

// 判斷,是判斷p而不是slow,因為slow最終會到null

while

(p) begin=begin->next;

p=p->next;

}return true;

}

面試題 02 06 回文鍊錶

編寫乙個函式,檢查輸入的鍊錶是否是回文的。示例 1 輸入 1 2輸出 false高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?思路 因為要求空間複雜度o 1 所以需要找出鍊錶終點,用乙個快指標和乙個慢指標,快指標每次跑2步,慢指標每次跑1步,遍歷的時候順便把前半部分鍊錶顛倒。最後...

面試題 02 06 回文鍊錶

難度簡單54收藏分享切換為英文接收動態反饋 編寫乙個函式,檢查輸入的鍊錶是否是回文的。示例 1 輸入 1 2 輸出 false示例 2 輸入 1 2 2 1 輸出 true採用反轉鍊錶 class solution 如果fast不為空,說明鍊錶的長度是奇數個 if fast null 反轉後半部分鍊...

234 回文鍊錶 面試題 02 06 回文鍊錶

難度 簡單 請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2輸出 false示例 2 輸入 1 2 2 1輸出 true高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?分析 用快慢指標找到中間節點 反轉後半截鍊錶,然後前後半截鍊錶比較元素大小 definition for si...