zoukankan      html  css  js  c++  java
  • 回文链表 leetcode

    234. 回文链表

    难度简单437收藏分享切换为英文关注反馈

    请判断一个链表是否为回文链表。

    示例 1:

    输入: 1->2
    输出: false

    示例 2:

    输入: 1->2->2->1
    输出: true
    

    进阶:
    你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

    通过次数73,751提交次数179,381

    步骤:

     1.利用快慢指针找出中间点

     2.将后半段翻转

     3.前段和翻转后的后半段一一对比,若能对上则为回文链表

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* reverse(ListNode* x,ListNode* y){
            if(!y)  return x;
            ListNode* nex=y->next;
            y->next=x;
            return reverse(y,nex);
        }
        bool isPalindrome(ListNode* head) {
            ListNode* slow=new ListNode(0);
            slow->next=head;
            ListNode* fast=slow;
        
            //快慢指针找出中间点
            while(fast&&fast->next){
                slow=slow->next;//1
                fast=fast->next->next;//2
            }
            //后半段开头节点
            ListNode* nex=slow->next;
            //结束标志
            slow->next=NULL;
            /*----------递归法----------*/
            // ListNode* head2=reverse(NULL,nex);
            /*----------循环法----------*/
            ListNode* x=NULL;
            ListNode* y=nex;
            while(y){
                ListNode* nexx=y->next;
                y->next=x;
                x=y;
                y=nexx;
            }
            //翻转链表头节点
            ListNode* head2=x;
            
            //若所有值都一一对应则为循环列表
            while(head2){
                if((*head).val!=(*head2).val)   
                    return false;
                head=head->next;
                head2=head2->next;
            }
            return true;
        }
    };
  • 相关阅读:
    iOS-Core Text 入门
    Mac浏览器全屏设置
    Quartz 2D - 图形上下文(Graphics Contexts)
    Quartz 2D 概述
    Quartz 2D官方文档翻译(持续更新中)
    那些年,我们常掉进去的坑
    CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算的原理 (转载)
    科大讯飞
    Object-C语言类的扩展
    科大讯飞语音识别
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/12638603.html
Copyright © 2011-2022 走看看