LeetCode#234-回文链表

package shuangzhizhen;
/*
234. 回文链表
请判断一个链表是否为回文链表。

示例 1:

输入: 1->2
输出: false
示例 2:

输入: 1->2->2->1
输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
          解题思路:
                 首先通过快慢指针找到中心节点
                 然后将链表后半部分反转
                 然后双指针判断各部分val值是否相等
                 不等直接返回false
 */
public class p234 {
    public static boolean isPalindrome(ListNode head) {
        if(head==null||head.next==null)return true;
        ListNode fast=head,slow=head;
        while (fast!=null&&fast.next!=null){
            fast=fast.next.next;
            slow=slow.next;
        }
        if(fast!=null)slow=slow.next;//说明链表长度为奇数,此时要反转的链表头部slow应该指向next
        ListNode right=reverseList(slow);//反转后半段链表
        ListNode left=head;
        while (right!=null){
            System.out.println(right.val+"     ohohohoho");
            right=right.next;

        }
        while (right!=null){
            if(right.val!=left.val){
                System.out.println(left.val+"---------"+right.val);
                return false;//若碰到值不对的,直接返回false
            }
            else {
                System.out.println("111111111111     "+left.val+"---------"+right.val);
                left=left.next;
                right=right.next;
            }
        }
        return true;


    }
    public static ListNode reverseList(ListNode head) {//反转链表
        if(head==null||head.next==null)return head;
        ListNode left=head,right=head.next;
        head.next=null;
        while (right!=null){
            ListNode tmp=right.next;
            right.next=left;
            left=right;
            right=tmp;
        }
        return left;
    }

    public static void main(String[] args) {
        ListNode l1=new ListNode(1);
        ListNode l2=new ListNode(2);
        ListNode l3=new ListNode(2);
        ListNode l4=new ListNode(1);
        l1.next=l2;
        l2.next=l3;
        l3.next=l4;
        l4.next=null;
        System.out.println(isPalindrome(l1));
    }

}

  运行结果:

反转链表运行结果:

posted @ 2020-07-11 12:55  菜鸡要加油  阅读(110)  评论(0编辑  收藏  举报