LeetCode每日一題 回文鍊錶

2021-10-04 17:23:11 字數 1186 閱讀 1438

題目:請判斷乙個鍊錶是否為回文鍊錶。

示例 1:

輸入: 1->2

輸出: false

示例 2:

輸入: 1->2->2->1

輸出: true

高階:思路:判斷是否是回文,可以將鍊錶儲存在乙個陣列中,然後用兩個指標乙個指向頭,乙個指向尾,同時向中間掃瞄。

演算法:複製鍊錶值到陣列列表中。

使用雙指標法判斷是否為回文。

**:

class solution 

int front = 0;//宣告頭指標

int back = vals.size() - 1;//宣告尾指標

while (front < back)

front++;

back--;

}return true;

}}

複雜度分析:

時間複雜度:o(n),其中 n 指的是鍊錶的元素個數。

空間複雜度:o(n),其中 n 指的是鍊錶的元素個數,我們使用了乙個陣列列表存放鍊錶的元素值。

思路:將鍊錶的後半部分反轉(修改鍊錶結構),然後將前半部分和後半部分進行比較。(注:比較完成後我們應該將鍊錶恢復原樣。雖然不需要恢復也能通過測試用例,因為使用該函式的人不希望鍊錶結構被更改。)

演算法:找到前半部分鍊錶的尾節點。計算鍊錶節點的數量,然後遍歷鍊錶找到前半部分的尾節點。若煉表有奇數個節點,則中間的節點應該看作是前半部分。

反轉後半部分鍊錶。

判斷是否為回文。

恢復鍊錶。

返回結果。

**:

class solution         

firsthalfend.next = reverselist(secondhalfstart);

return result;

}private listnode reverselist(listnode head)

return prev;

}//尋找後半部分的起始節點

private listnode endoffirsthalf(listnode head)

return slow;

}}

複雜度分析

時間複雜度:o(n),其中 n 指的是鍊錶的大小。

空間複雜度:o(1),我們是乙個接著乙個的改變指標,我們在堆疊上的堆疊幀不超過 o(1)。

LeetCode每日一題 回文數

前言 堅持日更leetcode刷題系列 不積跬步,無以至千里 不積小流,無以成江海。願與諸君共勉!題目 9.回文數 判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。示例 示例 1 輸入 121 輸出 true 示例 2 輸入 121 輸出 false 解釋 從...

leetcode 每日一題 回文數

數學解法 判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。示例 1 輸入 121 輸出 true示例 2 輸入 121 輸出 false 解釋 從左向右讀,為 121 從右向左讀,為 121 因此它不是乙個回文數。示例 3 輸入 10 輸出 false 解釋 ...

LeetCode每日一題 231回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 對於這個題目,要求時間複雜度子啊o n 空間複雜度為o 1 對於回文 我們好的辦法就是找出中間的節點,然後從中間開始,乙個個比較,看是否是回文的 找到中間節點很簡單,只要設定兩個指...