(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;
}
}
相关文章推荐
- java 性能监控 jstack 线程死锁 JConsole 和 BTrace 图形化工具
- Java基础学习总结(13)——流IO
- dwr和spring的整合
- Eclipse——浏览功能
- Java基础学习总结(12)——一哈希编码HashCode
- Java基础学习总结(12)——一哈希编码HashCode
- java 访问 usb
- java--foreach语句
- (java)Add Binary
- java--equal同==的区别
- java--final关键字的作用
- java---成员变量
- Java基础学习总结(11)——重载与重写
- Java基础学习总结(11)——重载与重写
- Java基础学习总结(11)——重载与重写
- (java)Bulls and Cows
- (java)Count and Say
- Spring整合mybatis
- (java)Remove Linked List Elements
- (java)Word Pattern