美文网首页
234. 回文链表

234. 回文链表

作者: 放下梧菲 | 来源:发表于2020-05-12 09:53 被阅读0次

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

示例 1:

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

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

本题如果不用O(1)空间复杂度还是比较简单的,可以把链表转化为数组,然后双指针一个从前面一个从后面开始遍历,也可以用递归来做,都是用的O(N)空间复杂度,但是题目要求用O(1),那就要费点心思了。

我这里给出的办法是将链表的一半给翻转,用头插翻转,然后逐一从前往后对比是否相同即可,那这么做的话,只需要额外的几个节点来记录一下临时变量,以及O(N/2)的时间复杂度,就是O(N)的时间复杂度。满足了题意。

代码如下:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isPalindrome(ListNode head) {

        if (head == null) return true;
        ListNode fast = head.next;
        ListNode slow = head;

        while (fast != null && fast.next != null){
            fast = fast.next.next;
            slow = slow.next;
        }
        
        //开始头插法
        ListNode r = slow.next;
        while (r != null && r.next != null){
            ListNode s = r.next;
            r.next = s.next;
            s.next = slow.next;
            slow.next = s;
        }
        slow = slow.next;
        while (slow != null){
            if (slow.val != head.val)
                return false;
            slow = slow.next;
            head = head.next;
        }   
        return true;
    }
}


来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

相关文章

  • LeetCode 234. 回文链表

    234. 回文链表 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2输出: false 示例 2: 输...

  • 漫谈递归-回文链表

    题目 234. 回文链表请判断一个链表是否为回文链表。 测试 示例 1:输入: 1->2输出: false 示例 ...

  • 234. 回文链表

    234. 回文链表[https://leetcode.cn/problems/palindrome-linked-...

  • LeetCodeEmm

    234. 回文链表[https://leetcode-cn.com/problems/palindrome-lin...

  • 234. 回文链表

    234. 回文链表[https://leetcode-cn.com/problems/palindrome-lin...

  • Leetcode 234 回文链表

    234. 回文链表[https://leetcode-cn.com/problems/palindrome-lin...

  • LeetCodeDay13 —— 回文链表&环形链表

    234. 回文链表 描述 请检查一个链表是否为回文链表。 进阶 你能在 O(n) 的时间和 O(1) 的额外空间中...

  • [链表]-234. 回文链表

    请判断一个链表是否为回文链表。 示例 1: 输入: 1->2输出: false 示例 2: 输入: 1->2->2...

  • 链表

    一、目录 206.反转链表 24.两两交换链表中的节点 25.K 个一组翻转链表(hard) 234.回文链表 1...

  • 如何判断回文链表

    读完本文,你可以去力扣拿下如下题目: 234.回文链表[https://leetcode-cn.com/probl...

网友评论

      本文标题:234. 回文链表

      本文链接:https://www.haomeiwen.com/subject/scpvnhtx.html