您的位置:首页 > 其它

leetcode 234: Palindrome Linked List

2016-03-25 12:43 309 查看
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?

[思路]

先分成大小同样(可能长度差1) 两部分, reverse一个list. 再比較.

[CODE]

/**
* Definition for singly-linked list.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int x) { val = x; }
* }
*/

// 1 2 3 2 1; 1 2 3 3 2 1;
public class Solution {
public boolean isPalindrome(ListNode head) {
//input check  abcba abccba
if(head==null || head.next==null) return true;

ListNode middle = partition(head);
middle = reverse(middle);

while(head!=null && middle!=null) {
if(head.val != middle.val) return false;
head = head.next;
middle = middle.next;
}
return true;
}
private ListNode partition(ListNode head) {
ListNode p = head;
while(p.next!=null && p.next.next!=null) {
p = p.next.next;
head = head.next;
}

p = head.next;
head.next = null;
return p;
}
private ListNode reverse(ListNode head) {
if(head==null || head.next==null) return head;
ListNode pre = head;
ListNode cur = head.next;
pre.next = null;
ListNode nxt = null;

while(cur!=null) {
nxt = cur.next;
cur.next = pre;
pre = cur;
cur = nxt;
}
return pre;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: