LeetCode:回文链表_234
本文最后更新于 903 天前,其中的信息可能已经有所发展或是发生改变。

思路

简单的方法是遍历一边链表,存入数组,再从首尾往中间判断是否相等。但是题目说了,进阶的解法是空间复杂度为O(1),首先排除递归反转链表,倒是可以利用迭代来反转链表。在优化下,不用反转整条链表来比较,只需反转半条即可。

一次就AC了,爽

题目

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false

 

示例 1:

输入:head = [1,2,2,1]
输出:true

示例 2:

输入:head = [1,2]
输出:false

 

提示:

  • 链表中节点数目在范围[1, 105]
  • 0 <= Node.val <= 9

 

进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

Related Topics
  • 递归
  • 链表
  • 双指针
  • 👍 1140
  • 👎 0
  • 代码

            public boolean isPalindrome(ListNode head) {
                // 注意链表长度为1的情况
    
                // 利用快慢指针找出链表中点
                ListNode dummy = new ListNode(-1, head);
                ListNode slow = dummy, fast = dummy;
                while (fast.next != null) {
                    slow = slow.next;
                    fast = fast.next;
                    if (fast.next != null) {
                        fast = fast.next;
                    }
                }
    
                // 反转后半段链表
                ListNode pre = null;
                ListNode curr = slow.next;
                while (curr != null) {
                    ListNode next = curr.next;
                    curr.next = pre;
                    pre = curr;
                    curr = next;
                }
    
                // 前半段链表和反转过的后半段链表相比较
                ListNode front = head, back = pre;
                while (back != null) {
                    if (front.val != back.val) {
                        return false;
                    }
                    front = front.next;
                    back = back.next;
                }
    
                return true;
            }
    作者:Yuyy
    博客:https://yuyy.info
    暂无评论

    发送评论 编辑评论

    
    				
    |´・ω・)ノ
    ヾ(≧∇≦*)ゝ
    (☆ω☆)
    (╯‵□′)╯︵┴─┴
     ̄﹃ ̄
    (/ω\)
    ∠( ᐛ 」∠)_
    (๑•̀ㅁ•́ฅ)
    →_→
    ୧(๑•̀⌄•́๑)૭
    ٩(ˊᗜˋ*)و
    (ノ°ο°)ノ
    (´இ皿இ`)
    ⌇●﹏●⌇
    (ฅ´ω`ฅ)
    (╯°A°)╯︵○○○
    φ( ̄∇ ̄o)
    ヾ(´・ ・`。)ノ"
    ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
    (ó﹏ò。)
    Σ(っ °Д °;)っ
    ( ,,´・ω・)ノ"(´っω・`。)
    ╮(╯▽╰)╭
    o(*////▽////*)q
    >﹏<
    ( ๑´•ω•) "(ㆆᴗㆆ)
    😂
    😀
    😅
    😊
    🙂
    🙃
    😌
    😍
    😘
    😜
    😝
    😏
    😒
    🙄
    😳
    😡
    😔
    😫
    😱
    😭
    💩
    👻
    🙌
    🖕
    👍
    👫
    👬
    👭
    🌚
    🌝
    🙈
    💊
    😶
    🙏
    🍦
    🍉
    😣
    Source: github.com/k4yt3x/flowerhd
    颜文字
    Emoji
    小恐龙
    花!
    上一篇
    下一篇