zoukankan      html  css  js  c++  java
  • [Algo] 306. Check If Linked List Is Palindrome

    Given a linked list, check whether it is a palindrome.

    Examples:

    Input:   1 -> 2 -> 3 -> 2 -> 1 -> null

    output: true.

    Input:   1 -> 2 -> 3 -> null  

    output: false.

    /**
     * class ListNode {
     *   public int value;
     *   public ListNode next;
     *   public ListNode(int value) {
     *     this.value = value;
     *     next = null;
     *   }
     * }
     */
    public class Solution {
      public boolean isPalindrome(ListNode head) {
        // Write your solution here
        ListNode revNode = reverse(head);
        ListNode cur = head;
        while (cur != null && revNode != null) {
          if (cur.value != revNode.value) {
            return false;
          }
          cur = cur.next;
          revNode = revNode.next;
        }
        return cur == null && revNode == null;
      }
    
      private ListNode reverse(ListNode node) {
        ListNode head = null;
        while (node != null) {
          ListNode newNode = new ListNode(node.value);
          newNode.next = head;
          head = newNode;
          node = node.next;
        }
        return head;
      }
    }
    /**
     * class ListNode {
     *   public int value;
     *   public ListNode next;
     *   public ListNode(int value) {
     *     this.value = value;
     *     next = null;
     *   }
     * }
     */
    public class Solution {
      public boolean isPalindrome(ListNode head) {
        // Write your solution here
        if (head == null || head.next == null) {
          return true;
        }
        ListNode fast = head.next;
        ListNode slow = head;
        while (fast != null && fast.next != null) {
          fast = fast.next.next;
          slow = slow.next;
        }
        ListNode mid = slow;
        mid.next = reverse(mid.next);
    
        ListNode revNode = mid.next;
        ListNode cur = head;
        while (cur != null && revNode != null) {
          if (cur.value != revNode.value) {
            return false;
          }
          cur = cur.next;
          revNode = revNode.next;
        }
        return true;
      }
    
      private ListNode reverse(ListNode node) {
        ListNode prev = null;
        while (node != null) {
          ListNode nxt = node.next;
          node.next = prev;
          prev = node;
          node = nxt;
        }
        return prev;
      }
    }
  • 相关阅读:
    Sysenter/Kifastcallentry hook 检测与恢复
    几种Windows进程通信
    漫谈IRP
    RC4加密算法
    在线考试系统基础模块开发(RBAC)
    在线考试系统项目环境搭建
    在线考试系统考试模块完善
    在线考试系统题库管理
    在线考试系统数据统计模块
    在线考试系统在线考试模块
  • 原文地址:https://www.cnblogs.com/xuanlu/p/12329863.html
Copyright © 2011-2022 走看看