您的位置:首页 > 编程语言 > Java开发

(java)Palindrome Linked List

2015-12-29 09:46 363 查看



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?
思路:本题题意是判断一个链表是否是回文链表,注意本题要求空间复杂度是0(1),所以不能借助其它的容器。先遍历一遍此链表,得到此链表的长度,然后将链表的后半部分转置。设置两个指针p,q分别指向前半部分链表的开始节点和后半部分链表的开始节点,判断前半部分链表是否和后半部分链表相同,相同就是回文链表,不同就不是。

代码如下(已通过leetocde)
public class Solution {

public boolean isPalindrome(ListNode head) {

if(head==null) return true;

ListNode temp=head;

int length=0;

while(temp!=null){

length++;

temp=temp.next;

}

ListNode q=head;

int count=1;

while(count<=length/2) {

q=q.next;

count++;

}

//System.out.println(q.val);

ListNode current=q;

ListNode pleft=null;

ListNode pright=null;

while(current!=null) {

pright=current.next;

current.next=pleft;

pleft=current;

current=pright;

}

ListNode laterhead=pleft;

while(laterhead!=null) {

if(laterhead.val!=head.val) return false;

else {

head=head.next;

laterhead=laterhead.next;

}

}

return true;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: