zoukankan      html  css  js  c++  java
  • 234. 回文链表 (JAVA)

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

    示例 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);
        }
    }
  • 相关阅读:
    caffe绘制训练过程的loss和accuracy曲线
    第32题 最长匹配括号
    http://deepdish.io/2015/04/28/creating-lmdb-in-python/
    caffe神经网络模型的绘图
    数据制作
    mnist测试
    caffe环境搭建笔记
    图论之遍历所有点的最小距离
    DesignSurface简介
    给交换机端口设ip
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/14639030.html
Copyright © 2011-2022 走看看