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

漫谈递归-回文链表

作者头像
早起的鸟儿有虫吃
发布于 2019-03-06 07:35:12
发布于 2019-03-06 07:35:12
1K00
代码可运行
举报
文章被收录于专栏:算法之美算法之美
运行总次数:0
代码可运行

题目

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

测试

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

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

答案

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
动态规划:单词拆分
题目链接:https://leetcode-cn.com/problems/word-break/
代码随想录
2021/02/26
8710
动态规划:单词拆分
面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 字符串处理+动态规划 合集!
秋招接近尾声,我总结了 牛客、WanAndroid 上,有关笔试面经的帖子中出现的算法题,结合往年考题写了这一系列文章,所有文章均与 LeetCode 进行核对、测试。欢迎食用
圆号本昊
2021/09/24
5200
面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 字符串处理+动态规划 合集!
【常见题型总结】序列 DP 模板题(总结「线性 DP」和「序列 DP」本质区别)
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。
宫水三叶的刷题日记
2023/01/03
7310
【LeetCode 周赛】渐入佳境
在题解一中,我们会重复计算同一段交替子序列的,我们可以使用一次遍历,再交替子序列终止时避免重复回退到该子序列内部。需要注意的是,由于不同的交替子序列可能存在 1 位重叠,所以要把 i 指针指向 j 指针,而不是指向 j 指针的下一位,才能保证没有缺失。例如 [3,4,3,4,5,4,5] 数组,第一组交替子数组为 [3,4,3,4] 和第二组交替子数组为 [4,5,4,5] 这两组有重叠部分。
用户9995743
2023/09/09
2450
【LeetCode 周赛】渐入佳境
算法细节系列(11):再谈动态规划
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014688145/article/details/70702445
用户1147447
2019/05/26
8100
Leetcode No.140 单词拆分 II(DFS)
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。 说明: 分隔时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。
week
2022/01/06
5810
【每日一题】- leetcode- 139. 单词拆分
为了找到解,我们可以检查字典单词中每一个单词的可能前缀,如果在字典中出现过,那么去掉这个前缀后剩余部分回归调用。
早起的鸟儿有虫吃
2019/09/05
8480
【每日一题】- leetcode- 139. 单词拆分
☆打卡算法☆LeetCode 140. 单词拆分 II 算法解析
“给定一个字符串s和字符串列表wordDict作为字典,在字符串s中增加空格来构建一个句子,使得句子中所有的单词都在词典中,以任意顺序返回这些句子。”
恬静的小魔龙
2022/08/07
5580
☆打卡算法☆LeetCode 140. 单词拆分 II  算法解析
回溯/贪心高频题
"有关递归的算法,都离不开“树”的遍历这一抽象模型。只不过对于不同的算法,在前(中)后序遍历的时候,所做的事不同而已。 "
王脸小
2019/10/28
1.4K0
回溯算法详解(修订版)
这篇文章是很久之前的一篇《回溯算法详解》的进阶版,之前那篇不够清楚,就不必看了,看这篇就行。把框架给你讲清楚,你会发现回溯算法问题都是一个套路。
labuladong
2021/09/23
4270
论动态规划穷举的两种视角
在线学习网站: https://labuladong.github.io/algo/
labuladong
2022/09/01
9380
论动态规划穷举的两种视角
刷题第6篇:单词拆分
我们使用递归的方法。每当遍历到一个字典中的单词之后,记录下当前的索引值,然后继续向后遍历。如果遍历到最后一个字符,恰好连接前面的字符,属于字典中的单词,则将此分割方式记录下来。
鹏-程-万-里
2020/02/26
3630
集合划分问题:排列组合中的回溯思想(修订版)
PS:本文是前文 回溯算法牛逼! 的修订版,首先添加了两种回溯思想的来源,即排列公式的两种推导思路;另外,有读者反映力扣添加了测试用例,以前的解法代码现在会超时,所以我进一步优化了代码实现,使之能够通过力扣的测试用例。
labuladong
2022/03/30
7530
集合划分问题:排列组合中的回溯思想(修订版)
【Leetcode】139.拆分词句
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
Leetcode名企之路
2019/08/16
6030
【Leetcode】139.拆分词句
☆打卡算法☆LeetCode 139. 单词拆分 算法解析
“给定一个字符串s和字符串列表wordDict作为字典,判断是否可以利用字典中出现的单词拼接出s。”
恬静的小魔龙
2022/08/07
5070
☆打卡算法☆LeetCode 139. 单词拆分  算法解析
Leetcode No.139 单词拆分(动态规划)
给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
week
2021/11/29
5460
Leetcode No.139 单词拆分(动态规划)
算法时空复杂度分析实用指南
我以前的文章主要都是讲解算法的原理和解题的思维,对时间复杂度和空间复杂度的分析经常一笔带过,主要是基于以下两个原因:
labuladong
2022/05/17
1.5K0
算法时空复杂度分析实用指南
一天一大 leet(单词拆分)难度:中等 DAY-25
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
前端小书童
2020/09/24
2020
一天一大 leet(单词拆分)难度:中等 DAY-25
​LeetCode刷题实战140:单词拆分 II
https://leetcode-cn.com/problems/word-break-ii/
程序员小猿
2021/01/19
5130
回溯算法和动态规划,到底谁是谁爹?文末送书
我们前文经常说回溯算法和递归算法有点类似,有的问题如果实在想不出状态转移方程,尝试用回溯算法暴力解决也是一个聪明的策略,总比写不出来解法强。
labuladong
2021/09/23
8820
推荐阅读
相关推荐
动态规划:单词拆分
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档