[LeetCode] Palindrome Linked List

来源:互联网 发布:spss怎么输入大量数据 编辑:程序博客网 时间:2024/06/06 09:16

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?

先翻转后半段,再比较

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public boolean isPalindrome(ListNode head) {        if(head == null)    return true;                //find the mid point        ListNode quickNode = head;        ListNode slowNode = head;        while(quickNode != null){            quickNode = quickNode.next;            if(quickNode != null) quickNode = quickNode.next;            slowNode = slowNode.next;        }                //slowNode is the mid node, reverse the linked list        ListNode pre = slowNode;        ListNode cur = null;        if(pre != null) {cur = pre.next; pre.next = null;}        ListNode next = null;        if(cur != null) next = cur.next;        while(cur != null){            cur.next = pre;            pre = cur;            cur = next;            if(next != null)                next= next.next;        }                while(pre != null){            if(pre.val != head.val) return false;            pre = pre.next;            head = head.next;        }                return true;    }}


0 0