第234題
請判斷乙個鍊錶是否為回文鍊錶。
示例
輸入: 1->2輸出:false
輸入: 1->2->2->1輸出:true
分析
回文鍊錶就是鍊錶中的元素是對稱相等的,通過這個特點,可以借助於棧,如果鍊錶的元素個數是奇數個,那麼就將最中間元素左邊的元素存入棧,然後再依次出棧與中間元素的右邊元素進行逐個的比較。如果都相等,那麼就是回文鍊錶,否則不是。如果元素的個數是偶數個,那就直接將前半部分存入棧,然後與後半部分逐個的比較。
publicboolean
ispalindrome(listnode head)
stack
stack = new stack<>();
int length = 0;
listnode p =head;
while (p != null
) p =head;
for (int i = 1; i <= length / 2; i++)
if (length % 2 != 0)
while (!stack.isempty())
p =p.next;
}return
true
; }
第445題
給你兩個 非空 鍊錶來代表兩個非負整數。數字最高位位於鍊錶開始位置。它們的每個節點只儲存一位數字。將這兩數相加會返回乙個新的鍊錶。
你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。
示例
輸入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)輸出:7 -> 8 -> 0 -> 7
分析:
乙個鍊錶代表乙個非負的整數,數字的最高位在鍊錶的開始位置,也就是說最低位在鍊錶的結尾,因為鍊錶是單鏈表所以想要沒辦法直接從鍊錶尾部向前依次遍歷到鍊錶的開始位置,但是我們計算的時候,又必須得從低位開始計算,同時考慮進製的因素,所以這裡也借助於棧,定義兩個棧,分別存入兩個鍊錶的元素,存入之後,再依次彈出,由於棧是後進先出的原則,所以就能夠實現從低位開始計算。實現的**如下:
publiclistnode addtwonumbers(listnode l1, listnode l2)
else
if (l1 == null
)else
if (l2 == null
) listnode head = new listnode(-1);
stack
num1 =getstack(l1);
stack
num2 =getstack(l2);
int carry = 0;
while (!num1.isempty() ||!num2.isempty() || carry != 0)
return
head.next;
}private stackgetstack(listnode l)
return
stack;
}
鍊錶 回文鍊錶
在leetcode上有兩個題 234.回文鍊錶 面試題 02.06.回文鍊錶 請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?遍歷一遍鍊錶得到值的陣列 判斷陣列是...
鍊錶 鍊錶求和 簡單
描述 你有兩個用鍊錶代表的整數,其中每個節點包含乙個數字。數字儲存按照在原來整數中相反的順序,使得第乙個數字位於鍊錶的開頭。寫出乙個函式將兩個整數相加,用鍊錶形式返回和。您在真實的面試中是否遇到過這個題?是 樣例給出兩個鍊錶 3 1 5 null 和 5 9 2 null,返回 8 0 8 null...
初級 鍊錶 回文鍊錶
題目 請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?思路 原思路 將鍊錶遍歷一遍,存入陣列,但空間複雜度為o n 不符合要求 正確思路 用快慢陣列找出鍊錶的中間...