面试题 02.06 回文链表(java)

编写一个函数,检查输入的链表是否是回文的。

 

示例 1:

输入: 1->2
输出: false 
示例 2:

输入: 1->2->2->1
输出: true 
 

进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-linked-list-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
     
    public boolean isPalindrome(ListNode head) {
     
        if(head == null) return true;
        ListNode p = head;
        ListNode q = head;
        while(q != null && q.next != null){
     
            p = p.next;
            q = q.next.next;
        }
        ListNode temp = p.next;
        p.next = null;
        while(temp != null){
     
            ListNode l1 = temp.next;
            temp.next = p;
            p = temp;
            temp = l1;
        }
        q = head;
        while(p != null){
     
            if(p.val != q.val) return false;
            p = p.next;
            q = q.next;
        }
        return true;
    }
}

你可能感兴趣的:(leetcode程序员面试金典,链表,算法,java,面试)