单链表进阶题目,点进来看一下这些题你都会吗

9efbcbc3d25747719da38c01b3fa9b4f.gif

 c语言中的小小白-CSDN博客c语言中的小小白关注算法,c++,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm=1001.2014.3001.5343

给大家分享一句我很喜欢我话:

知不足而奋进,望远山而前行!!!

铁铁们,成功的路上必然是孤独且艰难的,但是我们不可以放弃,远山就在前方,但我们能力仍然不足,所有我们更要奋进前行!!!

今天我们更新了单链表内容,

🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝

前言:

前面我们已经讲解了关于单链表,双链表以及一些相关的简单的题,本次我们就要上升一些难度,给大家带来一些更加有难度的题目。

题目一:OR36 链表的回文结构

本题链接:链表的回文结构_牛客题霸_牛客网

虽然我将这个题放在了第一个,但是这是本次几道题中难度最大的一个,下面我们来看一下这个题的题意吧。

这个题的意思很容易就能搞明白,就是判断一个链表是不是一个回文链表,但是真的当我们下手去写代码的时候就能发现这个题并不是那么的简单,因为这个题给的是一个链表,链表不像数组,我们只能通过一个节点去访问下一个节点,而且是单向的,所以我们怎样才能处理好这个问题呢。

这里我来给大家说一下我的思路吧:

我的思路是这样的,分为三个步骤:

  1. 首先我们用一个函数得到链表的中间节点
  2. 然后我们将中间节点后面的节点全部逆置
  3. 最后我们将这两个链表的进行比较

下面我们就来看一下我的实现代码:

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:
struct ListNode*middleNode(struct ListNode*head){ListNode*slow=head,*fast=head;while(fast&&fast->next){slow=slow->next;fast=fast->next->next;}return slow;}struct ListNode*reverlist(struct ListNode*head){struct ListNode*cur=head;struct ListNode*newhead=NULL;while(cur){struct ListNode*next=cur->next;cur->next=newhead;newhead=cur;     cur=next;}return newhead;}bool chkPalindrome(ListNode* A){struct ListNode* mid=middleNode(A);struct ListNode* rmid=reverlist(mid);while(rmid&&A){if(rmid->val!=A->val)return false;rmid=rmid->next;A=A->next;}return true;}
};

题目二:返回倒数第 k 个节点

我们下来看一下题目:

这个题相对于上面那个还是要简单不少的,我们来说一下这个题的思路:

大致思路就是我们用一个双指针,让快指针先走上k个节点,那样我们的慢指针和快指针就始终差k个节点了,往后我们再进行循环,每次两个指针都走一步。

思路很简单,下面我们来看一下代码:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/typedef struct ListNode ListNode;
class Solution {
public:int kthToLast(ListNode* head, int k) {ListNode*slow=head,*fast=head;while(k--){fast=fast->next;}while(fast!=NULL){slow=slow->next;fast=fast->next;}return slow->val;}
};

题目三:相交链表

我们再来看一下最后一道题,这个题的大致思路是要求我们判断两个代码是不是相交链表,所谓相交链表,并不是说像这样:

中间有一个相同的就可以,当然链表也不会出现这种情况,因为这样的链表的红色节点就指向了两个节点了。

所以题目的要求应该是这样的:

下面我们就来说一下这个题的思路:

首先我们应该先判断一下这个代码是不是相交代码,如果是,那么起码有一个节点是相同的,那么也就是最后一个节点,这里我们就得到最后一个节点,最后判断一下即可。

然后如果是,我们就要在得到最后一个节点的同时记录一下链表的长度,因为我们接下来的思路是先对长一点的链表进行操作,操作到其剩下的节点和另一个链表一样长之后,我们就一一比较就可以了,只要有一个相等,那么我们就可以结束循环了

下面我们来看一下代码:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/typedef struct ListNode ListNode;
class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode*cur1=headA,*cur2=headB;int count1=1,count2=1;while(cur1->next){cur1=cur1->next;count1++;}while(cur2->next){cur2=cur2->next;count2++;}if(cur1!=cur2)return NULL;ListNode*longlist=headA,*shortlist=headB;int len=abs(count1-count2);if(count1<count2){longlist=headB;shortlist=headA;}while(len--){longlist=longlist->next;}while(longlist!=shortlist){longlist=longlist->next;shortlist=shortlist->next;}return longlist;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/644439.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm远程连接server

1.工具–部署–配置 2.部署完成后&#xff0c;将现有的项目的解释器设置为ssh 解释器。实现在远端开发 解释器可以使用/usr/bin/python3

YesPMP众包平台最新项目

YesPMP一站式互联网众包平台&#xff0c;最新外包项目&#xff0c;有感兴趣的用户可进入平台参与竞标。 &#xff08;竞标后由项目方直接与服务商联系&#xff0c;双方直接对接&#xff09; 1.查看项目&#xff1a;个人技术-YesPMP平台 2.查看项目&#xff1…

嵌入式4-23 C++

值不能改变 语法错误 指向地址不能改变 值和地址都不能改变 值不能改变 地址不能改变 都不能改变

TDengine高可用架构之TDengine+Keepalived

之前在《TDengine高可用探讨》提到过&#xff0c;TDengine通过多副本和多节点能够保证数据库集群的高可用。单对于应用端来说&#xff0c;如果使用原生连接方式&#xff08;taosc&#xff09;还好&#xff0c;当一个节点下线&#xff0c;应用不会受到影响&#xff1b;但如果使用…

ip https证书260

现在大多数网站为了方便客户记忆&#xff0c;都会选择解析域名&#xff0c;访问域名就可以直接进入网站&#xff0c;但也有一些网站因为种种原因只有使用公网IP地址才能进入网站&#xff0c;这些网站想要保护网站数据安全就需要安装相应的数字证书——IP https证书。今天就随SS…

【简单讲解下如何学习C++】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

【安卓13】解决带GMS编译报super分区空间不足错误

1、错误信息 2、解决方案 不同供应商修改分区大小的文件路径不一样&#xff0c;但是万变不离其宗&#xff0c;根据报错信息全局搜索关键词BOARD_SUPER_PARTITION_SIZE 这里以RK供应商和AML供应商修改为例&#xff1a; &#xff08;1&#xff09;RK改法&#xff1a; 根目录下…

【技巧】Git 版本控制工具没有图标提示怎么办?

Git 版本控制工具在日常开发中使用率是非常高的&#xff0c;多数情况下会安装 TortoiseGit 之类的插件&#xff0c;让文件夹显示图标&#xff0c;方便观察文件的状态。但是有时装完插件之后发现&#xff0c;文件夹/文件并没有图标显示&#xff0c;可以按照以下思路进行排查&…

Kafka 3.x.x 入门到精通(01)——对标尚硅谷Kafka教程

Kafka 3.x.x 入门到精通&#xff08;01&#xff09;——对标尚硅谷Kafka教程 1. Kafka入门1.1 概述1.1.1 初识Kafka1.1.2 消息队列1.1.3 生产者-消费者模式1.1.4 消息中间件对比1.1.5 ZooKeeper 1.2 快速上手1.2.1 环境安装1.2.1.1 安装Java8&#xff08;略&#xff09;1.2.1.2…

windows下git提交修改文件名大小写提交无效问题

windows系统不区分大小写&#xff0c;以及git提交忽略大小写&#xff0c;git仓库已存在文件A.js&#xff0c;本地修改a.js一般是没有提交记录的&#xff0c;需要手动copy一份出来A.js&#xff0c;再删除A.js文件提交仓库删除后&#xff0c;再提交修改后的a.js文件。 windows决…

MySQL主从结构搭建

说明&#xff1a;本文介绍如何搭建MySQL主从结构&#xff1b; 原理 主从复制原理如下&#xff1a; &#xff08;1&#xff09;master数据写入&#xff0c;更新binlog&#xff1b; &#xff08;2&#xff09;master创建一个dump线程向slave推送binlog&#xff1b; &#xff…

Pytest精通指南(28)钩子函数-测试报告(pytest-html)

文章目录 前言应用场景插件安装参数分析使用方法拓展-定制化报告 前言 在软件开发过程中&#xff0c;测试是确保代码质量的关键环节。 而测试报告则是测试过程中不可或缺的输出物&#xff0c;它为我们提供了关于测试用例执行情况的详细信息&#xff0c;帮助我们快速定位和解决问…