題目:請判斷乙個鍊錶是否為回文鍊錶。
示例 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 對於回文 我們好的辦法就是找出中間的節點,然後從中間開始,乙個個比較,看是否是回文的 找到中間節點很簡單,只要設定兩個指...