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

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

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

快慢指针找到中间节点,以中间节点为界将后半部分翻转,将翻转后的那一半链表与前一半链表做回文比较。

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

class Solution {
public:
    /**
     * 
     * @param head ListNode类 the head
     * @return bool布尔型
     */
    bool isPail(ListNode* head) {
        // write code here
        if(head == nullptr || head->next == nullptr) return true;
        ListNode *fast = head, *mid = head;
        while (fast && fast->next) {  // 找到中间节点
            fast = fast->next->next;
            mid = mid->next;
        }
        fast = mid->next;
        mid->next = nullptr;
        ListNode *end = nullptr;
        // 进行后半部分翻转
        while(fast) {
            end = fast->next;
            fast->next = mid;
            mid = fast;
            fast = end;
        }
        //判断回文
        end = mid;
        while (head && end) {
            if (head->val != end->val) {
                return false;
            }
            head = head->next;
            end = end->next;
        }
        return true;
    }
};
全部评论

相关推荐

服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
09-27 14:42
已编辑
浙江大学 Java
未来未临:把浙大放大加粗就行
点赞 评论 收藏
分享
11-08 17:36
诺瓦科技_HR
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务