zoukankan      html  css  js  c++  java
  • leetcode刷题笔记 234题 回文链表

    leetcode刷题笔记 234题 回文链表

    源地址:234. 回文链表

    问题描述:

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

    示例 1:

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

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

    /**
     * Definition for singly-linked list.
     * class ListNode(var _x: Int = 0) {
     *   var next: ListNode = null
     *   var x: Int = _x
     * }
     */
    object Solution {
        def isPalindrome(head: ListNode): Boolean = {
            //特殊情况直接返回
            if (head == null || head.next == null) return true
    		
            //通过快慢指针找寻中间节点
            var fast = head.next
            var slow = head
            while (fast != null && fast.next != null){
                slow = slow.next
                fast = fast.next.next
            }
            
            //尝试对右半链表进行颠倒
            slow = slow.next
            //使用特殊值标记新节点
            var newHead = new ListNode(-99)
    
            while (slow!= null) {
                val tempNode =  slow.next
                slow.next = newHead
                newHead = slow
                slow = tempNode            
            }
    		
            //逐个节点比较 
            var oldHead = head
            while (newHead != null) {
                if (newHead.x != -99 && oldHead.x != newHead.x) return false
                oldHead = oldHead.next
                newHead = newHead.next
            }
            return true
        }
    }
    
  • 相关阅读:
    实验七:类的多态性
    实验六:类的封装(P105 3-35)
    实验五:任意输入10个int类型数据,排序输出,再找出素数
    第三周学习总结
    hbase对Java的简单操作
    hbase的shell命令
    需求工程3
    需求工程2
    软件需求1
    认识软件需求
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13857169.html
Copyright © 2011-2022 走看看