首页 > 编程语言 > 详细

234. 回文链表 (JAVA)

时间:2021-04-10 00:09:45      阅读:20      评论:0      收藏:0      [点我收藏+]

请判断一个链表是否为回文链表。

示例 1:

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

输入: 1->2->2->1
输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

 

思路:改变前半部分或者后半部分List的next指针。由于改变前半部分只需要一次遍历(用快、慢指针就能实现在第一次遍历的时候把前半部分的next指针反转)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public boolean isPalindrome(ListNode head) {
        ListNode fast = head, slow = head, pre = null, tmp;
        while(fast.next!=null) {
            fast = fast.next.next;
            tmp = slow.next;
            slow.next = pre;
            pre = slow;
            slow = tmp;
            if(fast == null){ //双数
                return check(pre, slow);
            }
        }

        //单数
        return check(pre, slow.next);
    }

    private boolean check(ListNode l1, ListNode l2){
        if(l1 == null) return true;
        if(l1.val != l2.val) return false;
        return check(l1.next, l2.next);
    }
}

 

234. 回文链表 (JAVA)

原文:https://www.cnblogs.com/qionglouyuyu/p/14639030.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!