`

Palindrome Linked List

阅读更多
Given a singly linked list, determine if it is a palindrome.

Follow up:
Could you do it in O(n) time and O(1) space?

判断一个单向链表是否为回文链表,要求时间复杂度为O(n),空间复杂度为O(1)。我们可以先用快慢指针找到中间的节点,然后将后半部分链表反转,然后以前半部分的链表进行比较,如果相同就返回true,如果不同就返回false。代码如下:
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public boolean isPalindrome(ListNode head) {
        if(head == null || head.next == null) return true;
        ListNode fast = head;
        ListNode slow = head;
        while(fast.next != null && fast.next.next != null) {
            fast = fast.next.next;
            slow = slow.next;
        }
        ListNode newHead = slow.next;
        slow.next = null;
        newHead = invert(newHead);
        while(newHead != null) {
            if(head.val != newHead.val)
                return false;
            head = head.next;
            newHead = newHead.next;
        }
        return true;
    }
    public ListNode invert(ListNode head) {
        ListNode pre = null;
        ListNode tem = null;
        while(head != null) {
            tem = head.next;
            head.next = pre;
            pre = head;
            head = tem;
        }
        return pre;
    }
}
分享到:
评论

相关推荐

    Leetcode 234. Palindrome Linked List

    方法1  思路:将链表中的元素都保存list中,并判断这个list和反转后的list,是否相同,如果相同,则回文;否则,则不回文。...# Definition for singly-linked list. # class ListNode(object): # def __i

    python-leetcode题解之234-Palindrome-Linked-List.py

    python python_leetcode题解之234_Palindrome_Linked_List.py

    leetcode2sumc-LeetCode:LeetCode的一些题目

    leetcode 2 sum c LeetCode 帮助文档 帮助文档存放在Help文件夹下。 文件名 文件描述 ...complexitypython.txt Python的一些常规操作的复杂度统计 ...Linked List(链表) ...List ...Linked ...Palindrome Linked List

    Leetcode部分试题解析

    19. **Palindrome Linked List** 和 **Palindrome Number**:判断链表或数字是否为回文。链表可以用双指针,数字可以转化为字符串后再判断。 20. **Plus One**:给数组中的所有数字加一。理解进位的概念,从数组...

    leetcode卡-leetcode:利特码解决方案

    Palindrome linked list Linked List Cycle trees Convert Sorted Array to Binary Search Tree string and search First Bad Version Dynamic Programing *** Climbing Stairs Set Matrix Zeroes API System....

    LeetCode最全代码

    * [Linked List](https://github.com/kamyu104/LeetCode#linked-list) * [Stack](https://github.com/kamyu104/LeetCode#stack) * [Queue](https://github.com/kamyu104/LeetCode#queue) * [Heap]...

    javalruleetcode-JavaInterviewChecklist:要检查的Java事项

    Palindrome Linked List LL中的插入排序 使用额外的缓冲区从未排序的链表中删除重复项 细绳 确定字符串是否包含所有唯一字符 (CTCI) 在不使用额外缓冲区的情况下删除字符串中的重复字符 (CTCI) 检查 2 个字符串是否...

    javalruleetcode-leetcode:力码解决方案

    [回文链表](md/Palindrome Linked List.md) - 2015-10-06 [数字一](md/数字一.md) - 2015-10-06 [使用栈实现队列](md/使用栈实现队列.md) - 2015-10-06 [BST 中的第 K 个最小元素](md/BST.md 中的第 K 个最小元素) -...

    leetcode跳跃-leetcode:leetcode题解

    例如,“回文链表”(Palindrome Linked List)要求判断一个链表是否为回文结构,这就需要对链表的遍历和反转有深刻理解。 困难难度的题目通常需要开发者具备扎实的算法基础和创新思维。这些题目往往没有明显的解决...

    LeetCode3 Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters. Examples: Given "abcabcbb", the answer is "abc", which the length is 3. Given "bbbbb", the answer is "b", with...

    leetcode中325题python-leetcode:leetcode

    leetcode中325题python leetcode 以 参考 和 Hash相关 1_两数之和 387_字符串中的第一个唯一字符 链表操作 2 ...删除链表的倒数第N个节点 ...remove-duplicates-from-sorted-list ...palindrome-linked-list 双指针遍历/滑动

    gasstationleetcode-leetcode-in-niuke:在牛客网上的在线编程中的leetcode在线编程题解

    linked-list-cycle-ii 链表 linked-list-cycle 链表 copy-list-with-random-pointer 复杂度 single-number 动态规划 candy 贪心 gas-station 动态规划 palindrome-partitioning-ii 动态规划 triangle 树 sum-root-to...

    Leetcode题目+解析+思路+答案.pdf

    - **Flatten Binary Tree to Linked List**:将二叉树展平为单链表。 - **Validate Binary Search Tree**:验证一个二叉树是否为二叉搜索树。 - **Recover Binary Search Tree**:恢复二叉搜索树中的两个错误节点...

    holbertonschool访谈

    霍尔伯顿学校访谈 面试准备培训模块。... 0x05-linked_list_palindrome 检查单链表是否是回文( C ) 0x06-log_parsing 编写脚本,逐行读取stdin并计算metrics ( Python ) 0x07-linked_list_cycle

    leetcodepython001-Algorithm:关于数据结构和算法的问题(Leetcode、编程之美和课程作业)

    Palindrome Number C++ 2016/4/26 Easy 044 Wildcard Matching Python 2016/4/1 Hard 051 N-Queens C++ 2016/5/18 Hard 092 Reverse Linked List II Python 2017/11/28 Medium 095 Unique Binary Search Trees ...

    算法实验.docx;涵盖栈、队列、二叉树、网的邻接矩阵、图的邻接表、希尔排序、直接排序、快速排序

    2. 链表(Linked List): 链表是另一种数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。虽然在提供的代码中没有直接使用链表,但链表是实现栈和队列的基础。 3. 图(Graph): 图是由顶点...

    小象学院2020 刷题班 3.2-4.171

    6. **环形链表**(Linked List Cycle II) - 知识点:链表,快慢指针法(Floyd判圈法) - 解题方法:设置两个指针,一个速度慢,每次移动一步,一个速度快,每次移动两步。如果链表存在环,它们会在环内相遇。 7....

    leetcode338-Leetcode:一些过滤leetcode问题的解决方案

    234.Palindrome 链表: | 725. 分部分拆分链表: | 328.奇偶链表:| 哈希表: 问题及解决方法: 1.二和:| 594.最长和谐子序列:| 128.最长连续序列:| 数组和矩阵 问题及解决方法: 283.移零:| 566.重塑矩阵: | ...

    uber leetcode

    #### 八、Reverse Linked List - **知识点:**链表操作、迭代。 - **题目描述:**反转一个单链表。 - **应用场景:**链表的基本操作之一,常用于链表的排序、合并等高级操作。 #### 九、Palindrome Permutation - *...

Global site tag (gtag.js) - Google Analytics