編寫乙個函式,檢查輸入的鍊錶是否是回文的。
我的思路:
1.如果能知道長度的話,就可以把前半段鍊錶倒置,然後與後半段依次判斷。
2.直接把整個鍊錶倒置,再依次比對,但時間複雜度滿足不了o(n)。
/** * definition for singly-linked list.
* struct listnode
* }; */
class
solution
while
(reverse)
head=head->next;
reverse=reverse->next;
}return
true
; }
};
官方答案:
把鍊錶中的值儲存在乙個陣列中,再判斷轉置的陣列與原陣列是否相等。
classsolution:
def ispalindrome(self, head: listnode) -> bool
: vals =
current_node =head
while current_node is
not none:
current_node =current_node.next
return
vals == vals[::-1]
這個方法可以延伸到很多地方,值得一記。
2021 / 9 / 16 更新
關於c++中字串反轉的操作
1.reverse(iterator begin, iterator end)
需要呼叫 algorithm庫
#include #include #include #include using namespace std;int main()
else
} }
if (temp < 0)
if (result[result.length()-1] == ',')
//for (int i = result.length() - 1; i >= 0; i--)reverse(result.begin(), result.end());
cout << result;
return 0;
}
鍊錶回文判斷
判斷一條單向鍊錶是不是 回文 回文,英文palindrome,指順著讀和反過來讀都一樣。判斷回文單向鍊錶跟判斷回文字串很大的區別就是遍歷。字串可以自由向前遍歷,而單向字串不行,因此最簡單直觀的思路就是將鍊錶翻轉,然後再進行比較。但是這種方法就比較笨,因為還需要建立另外乙個單鏈表來儲存原有的單鏈表,然...
判斷回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。鍊錶為單向無環鏈表 示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 這題是讓判斷鍊錶是否是回文鍊錶,所謂的回文鍊錶就是以鍊錶中間為中心點兩邊對稱。我們常見的有判斷乙個字串是否是回文字串,這個比較簡單,可以使用兩個指標,乙個最左邊...
leetcode 鍊錶 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?head null 空鍊錶,回文,返回true head.next null 只有乙個節點的列表,回文,返回tru...