(java)求证一个链表是否是回文的。

来源:互联网 发布:杭州淘宝培训机构 编辑:程序博客网 时间:2024/04/28 22:26

要求是空间O(1)时间O(N)

我的思路是利用了链表原地翻转的思想,这次是要将后半段进行原地翻转,然后从头结点和翻转的节点开始判断节点值是否相同。代码如下(可能写的有点乱,分了奇偶数的情况)

 public boolean isPalindrome(ListNode head) {        if(head==null || head.next==null){            return true;        }        int n=0;        int i=1;        ListNode p=head;        while(p!=null){            n++;            p=p.next;        }        p=head;         if(n%2==0){        i=1;        }else{        i=0;        }            while(i<n/2){               i++;               p=p.next;            }            ListNode q=p;            p=p.next;            q.next=null;            while(p!=null){               ListNode temp=p;               p=p.next;               temp.next=q.next;               q.next=temp;            }            q=q.next;            while(q!=null){                if(head.val!=q.val){                    return false;                }                head=head.next;                q=q.next;            }            return true;            }



0 0
原创粉丝点击