您的位置:首页 > 其它

234 Palindrome Linked List

2015-07-28 17:30 190 查看
题目链接:https://leetcode.com/problems/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?

解题思路:

1、遍历第一次链表,获取它的长度

2、遍历第二次链表,将它后半段链表就地逆转

3、遍历第三次链表,q指针指向链表头,p指针指向后半段已逆转的链表头,边比较值,边向后遍历

注意:

小心空指针异常

/**
* 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;
ListNode p = head;
int n = 1;
while(p.next != null) {
p = p.next;
n ++;
}
p = head;
if(n % 2 == 0) {
int k = n / 2;
while(k != 1) {
p = p.next;
k --;
}
} else {
int k = n / 2;
while(k != 0) {
p = p.next;
k --;
}
}
ListNode q = p.next;
while(q != null && q.next != null) {
ListNode temp = q.next;
q.next = q.next.next;
temp.next = p.next;
p.next = temp;
}
q = head;
while(p.next != null) {
p = p.next;
if(q.val != p.val)
return false;
q = q.next;
}
return true;
}
}


21 / 21 test cases passed.
Status: Accepted
Runtime: 472 ms
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: