【Leedcode】数据结构中链表必备的面试题(第三期)

news2024/9/27 17:33:16

【Leedcode】数据结构中链表必备的面试题(第三期)


文章目录

  • 【Leedcode】数据结构中链表必备的面试题(第三期)
  • 一、第一题
    • 1.题目
    • 2.思路
    • 3.源代码
  • 二、第二题
    • 1.题目
    • 2.思路
      • (1)第一种情况:偶数个链表
      • (2)第二种情况:奇数个链表
    • 3.源代码
      • (1)链表的中间结点的实现
      • (2)反转链表的实现
      • (3)链表比较函数的实现
      • (4)整体源代码
  • 总结


一、第一题

1.题目

CM11 链表分割 如下(示例):

现有一链表的头指针ListNode*pHead,给一定值x,
编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。 

在这里插入图片描述


2.思路

1.使用两个哨兵位的头结点lessheadgreathead,把小于4的连接到lesshead后面,大于4的链接到greathead后面;
2.再把小于4的最后一个连接到大于4的第一个:具体如下图


![在这里插入图片描述](https://img-blog.csdnimg.cn/ddf62b3dab8a4de7aea2d12a4549626d.png


注意:如下图!
在这里插入图片描述


3.源代码

代码如下(示例):

struct ListNode {
    int val;
    struct ListNode *next;
};
class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        struct ListNode* lessHead, *lessTail, *greaterHead, *greaterTail;
        lessHead = lessTail = (struct ListNode*)malloc(sizeof(struct ListNode));
        greaterHead = greaterTail = (struct ListNode*)malloc(sizeof(struct ListNode));
        
        lessTail->next = greaterTail->next = NULL;
        
        struct ListNode* cur = pHead;
        
        while (cur) {
            if (cur->val < x) {
                lessTail->next = cur;
                lessTail = lessTail->next;
            }
            else {
                greaterTail->next = cur;
                greaterTail = greaterTail->next;
            }
            cur = cur->next;
        }
        
        lessTail->next = greaterHead->next;
        greaterTail->next = NULL;
        
        struct ListNode* list = lessHead->next;
        free(lessHead);
        free(greaterHead);
        
        return list;
    }
};

二、第二题

1.题目

OR36 链表的回文结构 如下(示例):

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。

给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900

在这里插入图片描述


2.思路

(1)第一种情况:偶数个链表


在这里插入图片描述


(2)第二种情况:奇数个链表

在这里插入图片描述


3.源代码

(1)链表的中间结点的实现

  1. 链表的中间结点的实现 如下(示例):
struct ListNode
{
     int val;
    struct ListNode *next;
}
struct ListNode* middleNode(struct ListNode* head)
{
    struct ListNode* slow,*quick;
    slow=quick=head;
    while(quick && quick->next)
    {
        slow= slow->next;
        quick= quick->next->next;
    }
    return slow;
}

(2)反转链表的实现

  1. 反转链表的实现 如下(示例):
struct ListNode 
{
    int val;
     struct ListNode *next;
};
struct ListNode* reverseList(struct ListNode* head)
{
    //第二种方法
    struct ListNode* newhead=NULL;
    struct ListNode* cur=head;
    while(cur)
    {
        struct ListNode* next=cur->next;
        cur->next=newhead;
        newhead=cur;
        cur=next;
    }
    return newhead;
}

(3)链表比较函数的实现

代码如下(示例):

class PalindromeList {
public:
    bool chkPalindrome(ListNode* A) {
        struct ListNode* mid =middleNode(A);
        struct ListNode* rHead =reverseList(mid);

        struct ListNode* curA=A;
        struct ListNode* curR = rHead;
        while( curA && curR)
        {
            if(curA -> val != curR ->val)
            {
                return false;
            }
            else {
                curA=curA->next;
                curR =curR-> next;
            }
        }
        return true;
    }
};

(4)整体源代码

代码如下(示例):

struct ListNode 
{
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};
struct ListNode* middleNode(struct ListNode* head)
{
    struct ListNode* slow,*quick;
    slow=quick=head;
    while(quick && quick->next)
    {
        slow= slow->next;
        quick= quick->next->next;
    }
    return slow;
}
struct ListNode* reverseList(struct ListNode* head)
{
    //第二种方法
    struct ListNode* newhead=NULL;
    struct ListNode* cur=head;
    while(cur)
    {
        struct ListNode* next=cur->next;
        cur->next=newhead;
        newhead=cur;
        cur=next;
    }
    return newhead;

}
class PalindromeList {
public:
    bool chkPalindrome(ListNode* A) {
        struct ListNode* mid =middleNode(A);
        struct ListNode* rHead =reverseList(mid);

        struct ListNode* curA=A;
        struct ListNode* curR = rHead;
        while( curA && curR)
        {
            if(curA -> val != curR ->val)
            {
                return false;
            }
            else {
                curA=curA->next;
                curR =curR-> next;
            }
        }
        return true;
    }
};

总结

以上就是今天要讲的内容,本文介绍数据结构中链表必备的面试题(第三期)
如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

达梦数据库 闪回查询

当用户操作不慎导致错误的删改数据时&#xff0c;非常希望有一种简单快捷的方式可以恢复数据。闪回技术&#xff0c;就是为了用户可以迅速处理这种数据逻辑损坏的情况而产生的。 闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原。如果提交了&#xff0c;还没有…

钉钉微应用 - - - - 如何本地开发调试

关于钉钉微应用开发&#xff0c;真的尝尽了苦头。 要么是因为非钉钉环境报错&#xff0c;要么是发版到钉钉之后看不到日志的难受。 之前写过一个钉钉微应用 - - - - 如何本地开发调试&#xff1f;算是解决了一部分问题&#xff0c;但还是很不方便。 最近才发现&#xff0c;钉…

编写NodeJs脚本实现接口请求

要编写运行脚本,需要先搭建开发环境 环境搭建 nodeJs脚本运行,当然需要先安装nodejs环境 官方地址在这里: nodejs官网 打开官网地址,可以看到下面一句话: Node.js is an open-source, cross-platform JavaScript runtime environment. 在打开的页面,可以直接下载最新的…

测试员,如果未来5年你不想失业……你得学会自动化测试

工作中总会遇到各种各样的无常&#xff0c;这边测试工具的工作你刚刚接手&#xff0c;那边又临时紧急插播一个接口测试任务&#xff0c;这对于测试老鸟来说已然是常态&#xff0c;但对新手来说却是个挑战。 不得不承认&#xff0c;工作就是在无限的变化和挑战中不断的磨炼我们…

anchor box只是先验知识,bounding box是一种过程,ground truth才是标准答案,

anchor boxes是一组提前预定义的边框&#xff0c;这些框的宽高和数据集中目标物体的宽高大体是一致的&#xff0c;换句话说&#xff0c;数据集中的绝大多数物体都能找到与其大小一致的anchor box。 举例来说&#xff0c;如果数据集中包含苹果、猫&#xff0c;那么这组anchor bo…

Python|Leetcode刷题日寄Part03

Python|Leetcode刷题日寄Part0301&#xff1a;买卖股票的最佳时机02&#xff1a;合并两个有序数组03&#xff1a;三数之和04&#xff1a;找出字符串中第一个匹配项的下标05&#xff1a;全排列06&#xff1a;用队列实现栈07&#xff1a;加一08&#xff1a;电话号码的字母组合09&…

ubuntu 20.04 虚拟机和物理机之间无法拖动文件

相信kali大家总用过吧&#xff0c;在主机和虚拟机之间畅通无阻的拖动文件是一件很舒服的事情。 但是ubuntu不能这样很麻烦。 第一种方法 这是网上最多的方法&#xff0c;就是修改VMtools&#xff0c;但是这种方法不好用&#xff0c;只能让文件进来&#xff0c;而且还是比较麻烦…

HMM隐马尔可夫模型 | 关键原理+面试知识点

😄 HMM之前跟人生导师:李航学习过,这里结合自己的理解,精简一波HMM,总结一下面试中高频出现的要点。 文章目录 1、何为HMM?2、HMM三要素:3、HMM两大强假设4、HMM三个基本问题 :5、HMM中涉及的算法6、HMM缺点7、面试高频题7.1、HMM中为何引入维特比算法作为预测算法?…

嵌入式开发:在嵌入式应用程序中混合C和C++

许多嵌入式应用程序仍使用c语言编写&#xff0c;但越来越多的嵌入式开发人员现在使用C语言编写程序。某些应用程序甚至共享这两种语言。这有意义吗?C是嵌入式应用中最常用的编程语言。多年来&#xff0c;人们一直期待着向C过渡&#xff0c;但过渡速度相当缓慢。但是&#xff0…

【项目精选】JSP企业电子投票系统(视频+论文+源码)

点击下载源码 javaEE健康管理系统主要功能包括&#xff1a;投票、查看投票结果、隐藏/公布投票结果、编辑投票主题等等。本系统结构如下&#xff1a; 1.普通用户模块&#xff1a; 1).实现登录功能 2).实现用户登录的退出 3).投票 用户可以对已经开放的主题投票 4).查看投票结果…

Unity中画2D图表(5)——给定一系列散点,拟合出一条曲线

一、散点数据、拟合直线、拟合曲线 蓝色圆点是数据样本直线为拟合的直线曲线是拟合出来的曲线 二、C#中曲线拟合的实现 0、曲线拟合的一般步骤&#xff08;以平面坐标XY为例&#xff09; 【1】给定计算拟合的阶数k&#xff0c;k的取值最大为【样本个数-1】 【2】计算出拟合…

GoLang 协程池

Goroutine 1.Goroutine 是 Golang 提供的一种轻量级线程&#xff0c;我们通常称之为「协程」&#xff0c;相比较线程&#xff0c;创建一个协程的成本是很低的。所以你会经常看到 Golang 开发的应用出现上千个协程并发的场景。 Goroutine 的优势&#xff1a; 与线程相比&#xf…

Spring Security+jwt+redis+自定义认证逻辑 权限控制

Spring Securityjwtredis自定义认证逻辑 权限控制 1.拦截访问基本思路 2.创建数据库表&#xff1a;角色表&#xff08;应该6个表&#xff0c;这里只用用户表代替角色表&#xff09;、权限表、路径表、角色-权限表、权限-路径表 /* SQLyog Professional v12.14 (64 bit) MySQL…

Leetcode第450题删除二叉搜索树中的结点|C语言

题目&#xff1a; 给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。返回二叉搜索树&#xff08;有可能被更新&#xff09;的根节点的引用。 一般来说&#xff0c;删除节点可分为两个步骤…

一个跟蘑菇结缘的企业老板

记得那是一个很久以前的一家公司了董事长办公室里中的大型盆栽里面长了一个蘑菇董事长认为是祥瑞每天都会浇水后来一个新来的保洁阿姨以为杂草啥的给他掰掉扔垃圾桶了董事长第二天来浇水的时候发现没了就问谁动了他的蘑菇问道之后就跑到楼道大垃圾桶那里把蘑菇找回来种在花盆里…

“点工”的觉悟,5年时间从7K到24K的转变,我的测试道路历程~

2015年7月我从一个90%以上的人都不知道的二本院校毕业&#xff08;新媒体专业&#xff09;&#xff0c;凭借自学的软件测试&#xff08;点点点&#xff09;在北京找到了一份月薪7000的工作&#xff0c;在当时其实还算不错&#xff0c;毕竟我的学校起点比较差&#xff0c;跟大部…

python学习笔记——csv文件

目录 一、csv文件和Excel文件区别 二、手动转换&#xff08;文本与列表&#xff09; ①普通的写(列表嵌套转成文本的表格形式) ②普通的读&#xff08;文本的表格形式转成列表嵌套&#xff09; 二、csv库-读 1、CSV库-读-reader() 2、CSV库-读-DictReader() 三、csv库-写 …

基于YOLO的酸枣病虫害检测识别实践

在我前面的博文中对于农作物病虫害的检测识别已经做过了&#xff0c;不过那个主要是针对水稻的&#xff0c;文章如下&#xff1a;《基于yolov5的轻量级水稻虫害目标检测项目实践》感兴趣的话可以自行移步阅读。这里主要是针对酸枣常见的几种病虫害检测检测识别&#xff0c;首先…

苹果电脑如何录屏?3个方法,轻松学会

苹果电脑是很多创作者、视频制作人和经常工作用户的选择&#xff0c;但是如何在苹果电脑上录制高质量的屏幕视频呢&#xff1f;苹果电脑如何录屏&#xff1f;本文将介绍3种不同的方法&#xff0c;帮助小伙伴轻松学会如何在苹果电脑上录制屏幕视频。 方法一&#xff1a;使用Mac自…

假设检验的基本思想

假设检验 首先了解参数估计&#xff0c;比如有服从正态分布的数据集X∼N(μ,σ2)X\sim N(\mu,\sigma^{2})X∼N(μ,σ2)&#xff0c;我们希望根据样本x1,...xnx_{1},...x_{n}x1​,...xn​估计出参数μ,σ\mu,\sigmaμ,σ&#xff0c;这些参数可以是一个具体值&#xff0c;也可以…