nowcoder——回文结构

2024-05-12 15:12
文章标签 nowcoder 回文结构

本文主要是介绍nowcoder——回文结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 链表的回文结构_牛客题霸_牛客网 (nowcoder.com)

我们来分析该题:我们首先要清楚什么是回文结构?其实就是对称结构。如果一个链表呈对称结构就说明该链表具有回文结构。 下面给上一些例子:

那我们怎么判断该链表是否属于回文结构呢?

思路1:将链表元素放到数组中,然后定义两个指针分别从头部和尾部开始遍历,如果对应位置上的元素相等就说明该链表属于回文结构。这个思路虽然可以解决问题,但是题目给出了空间复杂度为O(1)的限制,所以该方法不可行。

思路2: 我们首先找到链表的中间节点,然后将中间节点之后的链表逆置,然后分别从第一个节点和逆置后的中间节点开始比较,如果对应位置上的元素相同则说明该链表符合回文结构,否则不符合。

画图表示:

有了思路,我们只需要完成第一步和第二步。找到中间节点以及逆置链表。 

找链表的中间节点我在前面已经解答过了我们在这里直接CV即可。没了解过的可以看这篇博客——leetcode——链表的中间节点-CSDN博客。

逆置链表我在前面也已经解答过了我们依旧CV一下。不了解的可以看这篇——leetcode——反转链表-CSDN博客

我们对思路进行了分析也完成了准备工作,现在我们来实现该题目:

class PalindromeList {
public://逆置链表方法ListNode* reverseList(ListNode* head){//如果原链表为空,直接返回NULLif(head == NULL){return NULL;}//原链表不为空ListNode*n1 = NULL;ListNode*n2 = head;ListNode*n3 = head->next;while(n2){n2->next = n1;n1 = n2;n2 = n3;if(n3!=NULL){n3 = n3->next;}}return n1;}//寻找中间节点方法ListNode* middleNode(ListNode* head) {ListNode* fast = head;ListNode* slow = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;}return slow;}bool chkPalindrome(ListNode* A) {ListNode* mid = middleNode(A);ListNode* rev = reverseList(mid);ListNode*pcur = A;while(pcur && rev){  if(pcur->val != rev->val){return false;}pcur = pcur->next;rev = rev->next;}return true;}
};

这篇关于nowcoder——回文结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/982975

相关文章

NowCoder HJ17 坐标移动

前言 华为机试刷题 题目: HJ17 坐标移动 编程语言: C++ 解题状态: 基础不牢,磕磕绊绊的 思路 本题主要是模拟题,分为三个步骤:获取字符串后利用分号获取坐标移动步骤;判断步骤是否合法;移动坐标。 代码 #include <algorithm>#include <iostream>#include <string>#include <vector>using na

【数据结构与算法 经典例题】链表的回文结构(图文详解)

💓 博客主页:倔强的石头的CSDN主页               📝Gitee主页:倔强的石头的gitee主页    ⏩ 文章专栏:《数据结构与算法 经典例题》C语言                                   期待您的关注 ​ 目录 一、问题描述 二、解题思路 三、C语言代码实现 一、问题描述

经典链表题-链表回文结构

🎉🎉🎉欢迎莅临我的博客空间,我是池央,一个对C++和数据结构怀有无限热忱的探索者。🙌 🌸🌸🌸这里是我分享C/C++编程、数据结构应用的乐园✨ 🎈🎈🎈期待与你一同在编程的海洋中遨游,探索未知的技术奥秘💞 📝专栏指路: 📘【C++】专栏:深入解析C++的奥秘,分享编程技巧与实践。 📘【数据结构】专栏:探索数据结构的魅力,助你提升编程能力。 链表的回文结构 温馨小提

LeetCode/NowCoder-链表经典算法OJ练习1

目录 说在前面 题目一:移除链表元素 题目二:反转链表 题目三:合并两个有序链表 题目四:链表的中间节点 SUMUP结尾 说在前面  dear朋友们大家好!💖💖💖数据结构的学习离不开刷题,之前给大家推荐过两个网站-牛客网和力扣,一个好的刷题网站是非常重要的,数据结构的思维需要靠刷题培养。我们上个篇目给大家介绍了单链表,也带大家实现了单链表的基本操作,我们今天趁热打

nowcoder possible sentences

题目: possible sentences 题目描述:Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word. Return all such possible sentences. 输

链表的回文结构(详解)

链表的回文结构(详解) 题目: 链表的回文结构 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 测试样例: 1->2->2->1返回:true 思路: 我们想要通过对比链表的前一半和链表的后一半是否相同来判断是否为回文结构

【题解】NowCoder dd爱框框

题目来源:牛客 dd爱框框 题目描述: 读入 n , x ,给出 n 个数 a[1] , a[2] ,…, a[n] ,求最小的区间 [l,r] ,使 a[l] + a[l + 1] + … + a[r] ≥ x ,若存在相同长度区间,输出 l 最小的哪个。 输入描述: 第一行两个数,n (1≤n≤10000000) , x (1≤x≤10000) 第二行n个数 a[i] (1≤a[i]

【题解】NowCoder BC149 简写单词

题目来源:牛客 BC149 简写单词 题目描述: 规定一种对于复合词的简写方式为只保留每个组成单词的首字母,并将首字母大写后再连接在一起。比如 “College English Test”可以简写成“CET”,“Computer Science”可以简写为“CS”,“I am Bob”简写为“IAB”。 输入一个长复合词(组成单词数 sum , sum ≥ 1 且 sum ≤ 100,每个单

【题解】NowCoder BC64 牛牛的快递

题目来源:牛客 BC64 牛牛的快递 题目描述: 牛牛正在寄快递,他了解到快递在 1kg 以内的按起步价 20 元计算,超出部分按每 kg 1元计算,不足 1kg 部分按 1kg计算。如果加急的话要额外付五元,请问牛牛总共要支付多少快递费。 输入描述: 第一行输入一个单精度浮点数 a 和一个字符 b ,a 表示牛牛要寄的快递的重量,b表示牛牛是否选择加急,‘y’ 表示加急 ,‘n’ 表示

【题解】NowCoder DP4 最小花费爬楼梯

题目来源:牛客 DP4 最小花费爬楼梯 题目描述: 给定一个整数数组 cost , 其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用,下标从 0 开始。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费。 数据范围:数组长度满足 1 ≤ n ≤ 105 ,数组中的值满足 1