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

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

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;
    }
};
全部评论

相关推荐

把球:这个听过,你加了就会发现是字节的hr
点赞 评论 收藏
分享
最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务