前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >漫谈递归-回文链表

漫谈递归-回文链表

作者头像
程序员小王
发布2019-03-06 15:35:12
9800
发布2019-03-06 15:35:12
举报
文章被收录于专栏:架构说架构说

题目

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

测试

示例 1: 输入: 1->2 输出: false

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

答案

/**
1  定义2个指针,head tail 
2. 递归遍历tail链表
3. 通过
     head++  链表前进, 递归特点:从上到下 
             这个是子递归完在函数内部修改的,然后当前递归在使用
             head已经发生改变)
     tail --     链表倒退,  
                 递归特点 回溯,利用函数栈跟踪轨获取最后节点。
                 tail没有改变
   判断是否回文 tail ==head
4.如果是继续,如果不是返回false
//执行用时: 20 ms, 在Palindrome Linked List的C++提交中击败了42.09% 的用户
**/
class Solution {
public:
    bool isPalindrome(ListNode* head) {
         //这2个参数意义不一样一个指针,一个指针的引用
        return isPalindrome(head,head);
    }
  
    bool isPalindrome(ListNode* tail,ListNode* &head)
    {
        if(NULL==tail) 
        {
            return true;
        }       
         //从上到下不做任何原始比较,直到结束。返回true
        bool flag=isPalindrome(tail->next,head);
        if (false ==flag)
        {
            return false;

        }        //最外层比较
        if (tail->val !=head->val)
        {
            return false;
        }
        //最里层比较,head是引用,修改的指针本身
        head =head->next;
        return flag;

    }
};

分析

  1. 什么是回文:
  1. 这就是递归 recursion(head)
  2. 链表 每个节点都是相同的结构 符合递归的特点 链表顺序遍历,这个规律无法违背?
  3. 递归特点之一 回溯 实现链表倒序遍历

性能

因为采用递归

执行用时: 20 ms, 在Palindrome Linked List的C++提交中击败了42.09% 的用户

空间: o(n) 时间:o(n)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Offer多多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 测试
  • 答案
  • 分析
  • 性能
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档