判断是否是回文链表

1. 回文链表

题目如下:leetcode-234

请判断一个链表是否为回文链表。
示例 1:
输入: 1->2
输出: false
示例 2:
输入: 1->2->2->1
输出: true
进阶:
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目确实很简单,但是自己在解题途中发生了一个错误,就是自己知道要翻转后半部分的链表,但是却没有在快慢指针的时候限定快指针的结束位置不能够为null,最后导致每次翻转被翻转的一定会少一个节点!就导致了解题错误!翻转若是null传入,表示不用翻转,违背自己初衷

2. 解题&代码

大致解题主要是注意翻转后半部分就好,翻转可以采用递归翻转和非递归方式翻转!现在面试中考察的多的是递归翻转!

代码如下:

public boolean isPalindrome(ListNode head) {
        if (head == null || head.next == null) return true;
        ListNode fast = head;
        ListNode slow = head;
        // 这里只需要将fast节点的停止条件前移即可
        while (fast.next != null && fast.next.next != null) {
            fast = fast.next.next;
            slow = slow.next;
        }
        // 翻转后部链表
        fast = slow.next;
        slow.next = null;
        slow = head;
        fast = reverseNode(fast);
        // 开始比对,只要不相等就返回false
        while (fast != null) {
            if (slow.val != fast.val) return false;
            fast = fast.next;
            slow = slow.next;
        }
        return true;
    }

    /**
     * 非递归版本
     */
    public ListNode reverseNode(ListNode head) {
        if (head == null || head.next == null) return head;
        ListNode p = null;
        while (head != null) {
            ListNode temp = head.next;
            head.next = p;
            p = head;
            head = temp;
        }
        return p;
    }

    /**
     * 递归版本
     */
    public ListNode recurseNode(ListNode head){
        if(head == null || head.next == null) return head;
        ListNode node = recurseNode(head.next);
        head.next.next = head;
        head.next = null;
        return node;
    }

3. 小结

题目很简单,但是自己还是出现了点小问题,说明思考的还是不够细致!还需要继续加油!

keep thinking, keep coding! 2020-10-23写于南京

全部评论

相关推荐

2025年初,新的一年开始,我给自己暗暗打气,发誓今年一定要拿到offer。如今2025年即将结束,找工作仍然没有任何水花,如今的失意和落魄和年初信心满满的姿态形成鲜明对比,想必也是因为被社会毒打,认清现实了吧。先分享一下贴主的背景,本人女,本科末流985文科专业,后来保送到华五,成绩一直是班级第一,有过国奖,实习有多段头部大厂经历。发贴的直接原因是今天华为面试挂,在反思中有很多复杂的想法,包括对自身能力的怀疑、对面试官所提问题的不解、对大环境的无奈。贴主是一个说话温柔、不喜欢咄咄逼人、有点社恐的人(基本上算是人们眼中对小女生的刻板印象,所以在历次群面中基本全挂(看到大家争抢当leader、t...
在找内推的小虾米:感觉这一段经历和我好像啊,前段时间面了很多车企,面试项目经历各种被拷打,大多数都没过一面,最有希望拿offer的一个终面挂了把我干破防了,打电话给爸妈哭了一个多小时才缓过来。我也开始否定自己,否定自己的一切,包括性格,能力,成长经历。。。最后面了深圳的某家公司,面试官人都挺友好,提的问题有深度但找到切入点 ,最后hr也按岗位最高的标准给的offer,我才发现自己并没有这么不堪,只是我的能力和经验和之前的岗位要求不那么符合而已。帖主一定不要灰心,招聘的窗口期还有很长很长,保持自信扬长避短,一定有企业能发现你的闪光点,祝好。
我的求职进度条
点赞 评论 收藏
分享
头像
10-27 15:50
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务