? 給你一個單鏈表的頭節點?head
?,請你判斷該鏈表是否為回文鏈表。如果是,返回?true
?;否則,返回?false
?。
? 示例 1:
輸入:head = [1,2,2,1] 輸出:true
? 示例 2:
輸入:head = [1,2] 輸出:false
提示:
- 鏈表中節點數目在范圍
[1, 105]
?內 0 <= Node.val <= 9
進階:你能否用?O(n)
?時間復雜度和?O(1)
?空間復雜度解決此題?
?
?該題的實現代碼如下所示:
public boolean isPalindrome(ListNode head) {List<Integer> vals=new ArrayList<Integer>();ListNode currentNode=head;while(currentNode!=null){vals.add(currentNode.val);currentNode=currentNode.next;}int slow=0;int fast=vals.size()-1;while(slow<fast){if(!vals.get(slow).equals(vals.get(fast))){return false;}slow++;fast--;}return true;}
?
?解題的思路如下:1.復制當前節點的數組到新數組vals中;
2.定義快慢指針,如果slow指針的值不等于fast指針的值,則返回false;
3.慢指針slow從起始位置向末端位置查找,而fast快指針則從末端位置向起始位置開始進行查找。
?
? 感謝各位讀者的閱讀與支持,您的支持是我前進的動力!我希望我的博文能夠帶給您有用的算法知識和啟發。希望本題對大家有幫助,謝謝各位讀者的支持!!!