234. Palindrome Linked List

題目234. Palindrome Linked List

Given a singly linked list, determine if it is a palindrome.
Follow up:
Could you do it in O(n) time and O(1) space?

思路:使用快慢指針,找到鏈表的中點(diǎn),然后將后半部逆轉(zhuǎn).
最后前后兩部分的元素逐個進(jìn)行對不
public class Solution {
    public boolean isPalindrome(ListNode head) {
        //快慢指針, lower到中點(diǎn), 然后后半部分逆轉(zhuǎn).  然后分別比較這兩部分的值即可
        if(head == null || head.next == null){
            return true;
        }
        
        if(head.next.next == null){
            return head.val == head.next.val;
        }
        
        ListNode lowerNode = head;
        ListNode fastNode = head;
        while(fastNode.next != null && fastNode.next.next != null){
            lowerNode = lowerNode.next;
            fastNode = fastNode.next.next;
        }
        
        ListNode secondNode = lowerNode.next;
        lowerNode.next = null;
        ListNode secondHead = new ListNode(1);
        ListNode tempNode = null;
        while(secondNode != null){
            tempNode = secondNode.next;
            secondNode.next = secondHead.next;
            secondHead.next = secondNode;
            secondNode = tempNode;
        }
        
        secondNode = secondHead.next;
        ListNode firstNode = head;
        while(secondNode != null){
            if(secondNode.val != firstNode.val){
                return false;
            }
            firstNode = firstNode.next;
            secondNode = secondNode.next;
        }
        
        return true;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容