请判断一个链表是否为回文链表。
示例 1:
输入: 1->2
输出: false
示例 2:
输入: 1->2->2->1
输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
思路:我直接按照进阶的要求解的这道题,具体思路是翻转后一半列表,然后定义定义两个头指针同时遍历两部分,遇到不相同的直接false,若遍历完则返回true
class Solution {
public boolean isPalindrome(ListNode head) {
int len=0,num=0;
if(head==null || head.next==null)
return true;
ListNode list=new ListNode(-1);
list.next=head;
while(head!=null)
{
len++;
head=head.next;
}
head=list.next;
while(head!=null)
{
num++;
head=head.next;
if(num==len/2)
break;
}
if(len%2>0) head=head.next;
ListNode myhead=head;
ListNode next=myhead==null?null:myhead.next;
while(myhead!=null)
{
if(next==null) break;
ListNode tmp=next.next;
next.next=myhead;
myhead=next;
next=tmp;
if(tmp==null)
break;
}
num=0;
head=list.next;
while(num<len/2)
{
//System.out.printf("%d %d\n", head.val,myhead.val);
if(head.val!=myhead.val)
return false;
head=head.next;
myhead=myhead.next;
num++;
}
return true;
}
}
转载:https://blog.csdn.net/haut_ykc/article/details/101297351
查看评论