题解 | #判断一个链表是否为回文结构#

判断一个链表是否为回文结构

https://www.nowcoder.com/practice/3fed228444e740c8be66232ce8b87c2f

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 the head
     * @return bool布尔型
     */
    ListNode * reverseList(ListNode *head) {
        if (!head || !head->next) {
            return head;
        }
        ListNode *nxt = head->next;
        ListNode *newhead = reverseList(nxt);
        nxt->next = head;
        head->next = nullptr;
        return newhead;
    }
    
    bool isPail2(ListNode *l1, ListNode *l2) {
        if (!l1) {
            return true;
        }
        return l1->val == l2->val ? isPail2(l1->next, l2->next): false;
    }

    bool isPail(ListNode* head) {
        if (!head || !head->next) {
            return true;
        }
        ListNode *bef = nullptr;
        ListNode *slow = head;
        ListNode *fast = head;
        while (fast && fast->next) {
            bef = slow;
            slow = slow->next;
            fast = fast->next->next;
        }
        bef->next = nullptr;
        slow = reverseList(slow);
        return isPail2(head, slow);
    }
};

思路:先反转后比较。

找到链表中点,将后面的链表翻转过来,然后判断两个链表是否相等。

链表节点个数可能为奇数,导致后面的链表节点个数多一个,所以判断条件改变一下:前面的链表为空即可返回true。

全部评论

相关推荐

coffrar:全都是已读😅沟通一千五百多个了
点赞 评论 收藏
分享
02-08 15:53
门头沟学院 Java
CoderEcho:让公司知道便宜没好货
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
02-16 22:33
杉川机器人 嵌入式工程师 18.0k*13.0, 年终奖1~9个月浮动
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务