【每日刷题】Day16

news2024/11/26 20:23:30

【每日刷题】Day16

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 24. 两两交换链表中的节点 - 力扣(LeetCode)

2. 160. 相交链表 - 力扣(LeetCode)

3. 136. 只出现一次的数字 - 力扣(LeetCode)

1. 24. 两两交换链表中的节点 - 力扣(LeetCode)

 //0ms  100%思路:创建新链表,malloc新节点按照题目所给顺序存储原链表节点,新链表逐个连接新节点

typedef struct ListNode LN;


 

 int ListNodeQua(LN* phead)//计算原链表节点数

 {

    LN* pmove = phead;

    int count = 0;

    while(pmove)

    {

        count++;

        pmove = pmove->next;

    }

    return count;

 }

struct ListNode* swapPairs(struct ListNode* head)

{

    if(head==NULL)

    {

        return NULL;

    }

    if(head->next==NULL)

    {

        return head;

    }


 

    int n = ListNodeQua(head);

    LN* sentry = (LN*)malloc(sizeof(LN));//新链表哨兵位

    LN* pmove = head;//原链表奇数位节点

    LN* pmove1 = sentry;//用于遍历新链表连接新节点

    int i = 0;

    while(i<n/2)//交换次数即为循环次数

    {

        LN* pmove2 = pmove->next;//原链表偶数位节点

        LN* pget1 = (LN*)malloc(sizeof(LN));//新节点1

        pget1 = pmove2;//存储原链表偶数位节点

        pmove1->next = pget1;//连接新节点

        pmove1 = pmove1->next;//往后遍历以连接下一个节点

        LN* pget2 = (LN*)malloc(sizeof(LN));//新节点2

        pget2 = pmove;//存储原链表奇数位节点

        pmove->next = pmove2->next;//这里需要注意,由于原链表奇数位节点的next指向后一个偶数位节点,而下面我们在让新链表连接新节点时,会导致相邻两个节点成环,因此这里需要在新链表连接新节点前让奇数位节点的next指向下一个奇数位节点

        pmove1->next = pget2;//连接新节点

        pmove1 = pmove1->next;//往后遍历以连接下一个节点

        pmove = pmove->next;//由于上面我们奇数位节点next指向了下一个奇数位节点,因此这里直接走向next即可进行下一个交换

        i++;

    }

    LN* phead = head;

    if(n%2==1)//如果链表个数为奇数个,则在最后一次交换后会遗漏下最后一个节点,这里只需要直接将最后一个节点连接上即可

    {

        while(phead->next)

        {

            phead = phead->next;

        }

        pmove1->next = phead;

    }

    return sentry->next;

}

2. 160. 相交链表 - 力扣(LeetCode)

//思路:根据题目要求我们容易想到用两个指针遍历两个链表,当指针相等时就是相交的起始节点,直接返回。但是也容易发现一个问题,链表的长度不是严格相等的,因此,若是两个指针都在第一个节点同时遍历则可能会错过。那么我们这里的思路就是如何让两个指针刚好相遇——让较长的链表的指针先走过两链表长度差值的节点数。

typedef struct ListNode LN;

int ListNodeQua(LN* phead)//计算链表节点数

{

    LN* pmove = phead;

    int count = 0;

    while(pmove)

    {

        count++;

        pmove = pmove->next;

    }

    return count;

}


 

int my_abs(int x,int y)//返回两链表节点数差值(正数)

{

    return x>y?x-y:y-x;

}


 

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)

{

    if(headA==NULL||headB==NULL)

    {

        return NULL;

    }

    LN* pf1 = headA;

    LN* pf2 = headB;

    int a = ListNodeQua(headA);//链表A的节点数

    int b = ListNodeQua(headB);//链表B的节点数

    int x = my_abs(a,b);//两链表节点数差值的绝对值

    int flag = a>b?1:0;//用于判断需要哪个链表的指针走

    while(x)

    {

        if(flag)//如果flag为1,则说明链表A较长,则让pf1的指针走过x个节点

        {

            pf1 = pf1->next;

        }

        else//否则则是链表B较长,让pf2走过x个节点

        {

            pf2 = pf2->next;

        }

        x--;

    }

    while(pf1&&pf2)//这时再让pf1、pf2同时走,相遇时直接返回

    {

        if(pf1==pf2)

        {

            return pf1;

        }

        pf1 = pf1->next;

        pf2 = pf2->next;

    }

    return NULL;

}

3. 136. 只出现一次的数字 - 力扣(LeetCode)

//思路:这里需要知道的知识——

1、0^上任何数都等于任何数本身

2、两个相同的数^起来等于0

知道了这两个知识后,这道题就变得非常简单,因为数组中只有一个数字出现一次,其余的数字均出现了两次,那么我们用一个数(初始为0)^上这个数组中的每一个数,相同的数^在一起变为0,则^到最后就会变成0^上那个只出现了一次的数,而0^上任何数等于任何数,则直接返回最终^的结果即可

int singleNumber(int* nums, int numsSize)

{

    int num = 0;

    for(int i = 0;i<numsSize;i++)

    {

        num^=nums[i];

    }

    return num;

}

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

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

相关文章

【编程Tool】DevC++的安装配置及使用保姆级教程

目录 前言&#xff1a;软件介绍 1.软件下载及安装 1.1. 双击可执行文件进行安装 2.软件配置 2.1.选择语言 2.2 同意相关协议 2.3.组件保持默认并点击Next 2.4. 修改安装路径 2.5. 等待安装 2.6. 点击Finish&#xff0c;完成安装 2.7 选择语言 2.8.个性化设置 2.9. 点击OK&…

MySQL——创建和插入

一、插入数据 INSERT 使用建议; 在任何情况下建议列出列名&#xff0c;在 VALUES 中插入值时&#xff0c;注意值和列的意义对应关系 values 指定的值顺序非常重要&#xff0c;决定了值是否被保存到正确的列中 在指定了列名的情况下&#xff0c;你可以仅对需要插入的列给到…

MongoDB的go SDK使用集锦

在上一章解读MongoDB官方文档获取mongo7.0版本的安装步骤与基本使用介绍了如何使用mongo shell操作mongo数据库&#xff0c;接下来介绍如何使用sdk来操作数据库&#xff0c;这里以go语言为例&#xff0c;其他语言请查看源文档mongo docs Quick Start 内置数据结构 MongoDB是存…

24 静动态库

首先创建两个函数的头文件和源文件 最后的main函数 #include <stdio.h> #include "print.h" #include "sum.h"int main() {Print("时间");printf("%d\n", sum(3, 5));return 0; }将函数编译成.o文件 make生成文件 make he…

ENVI实战—一文学会使用传感器自带信息配准工具进行几何校正

实验1&#xff1a;学会使用传感器自带信息配准工具 目的&#xff1a;利用ENVI的传感器自带信息配准工具&#xff0c;掌握几何校正的一般方法。 过程&#xff1a; 1.对MODIS影像进行校正&#xff1a; ①读取影像&#xff1a;打开文件&#xff0c;点击“打开为”&#xff0c;…

windows下已经创建好了虚拟环境,但是切换不了的解决方法

用得多Ubuntu&#xff0c;今天用Windows重新更新anaconda出问题&#xff0c;重新安装之后&#xff0c;打开pycharm发现打开终端之后&#xff0c;刚开始是ps的状态&#xff0c;后面试了网上改cmd的方法&#xff0c;终端变成c盘开头了 切换到虚拟环境如下&#xff1a;目前的shell…

IDA动态调试

动态调试 这里我使用测试程序是buuctf逆向题目中的第一题easyre.exe 将其拖进IDA中打开 在调试前要选择调试器&#xff0c;在菜单栏找到调试器&#xff0c;如下选择之后点击确定。 在启动调试前下断点 下好断电到调试器里点击启动进程 会有警告信息&#xff0c;选择是即可…

ARP代理

10.1.0.1/8 和10.2.0.1/8是在同一个网段 10.1.0.2/16 和10.2.0.2/16 不在同一个网段 10.1.0.1/8 和10.1.0.2/16 是可以ping通的 包发出来了&#xff0c;报文有发出来&#xff0c;目的地址是广播包 广播请求&#xff0c;发到路由器的接口G 0/0/0 target不是本接口&#xff0…

Linux 序列化、反序列化、实现网络版计算器

目录 一、序列化与反序列化 1、序列化&#xff08;Serialization&#xff09; 2、反序列化&#xff08;Deserialization&#xff09; 3、Linux环境中的应用实例 二、实现网络版计算器 Sock.hpp TcpServer.hpp Jsoncpp库 Protocol.hpp MyDaemon.hpp CalServer.cc Ca…

3.1 iHRM人力资源 - 组织架构、树形结构、添加子部门

iHRM人力资源 - 组织架构 文章目录 iHRM人力资源 - 组织架构一、展示数据-树形组件1.1 组件说明1.2 树组件自定义结构获取作用域数据1.2.1 说明1.2.2 页面代码1.2.3 获取组织架构数据-api 1.3 效果图1.4 修改树形结构bug 二、添加子部门2.1 表单弹层2.1.1 下拉菜单点击事件2.1.…

中国科学院大学学位论文LaTeX模版

Word排版太麻烦了&#xff0c;公式也不好敲&#xff0c;推荐用LaTeX模版&#xff0c;全自动 官方模版下载位置&#xff1a;国科大sep系统 → \rightarrow → 培养指导 → \rightarrow → 论文 → \rightarrow → 论文格式检测 → \rightarrow → 撰写模板下载百度云&#…

Vitis HLS 学习笔记--readVec2Stream 函数-探究

目录 1. 高效内存存取的背景 2. readVec2Stream() 参数 3. 函数实现 4. 总结 1. 高效内存存取的背景 在深入研究《Vitis HLS 学习笔记--scal 函数探究》一篇文章之后&#xff0c;我们对于scal()函数如何将Y alpha * X这种简单的乘法运算复杂化有了深刻的理解。本文将转向…

前端console用法分享

console对于前端人员来讲肯定都不陌生&#xff0c;相信大部分开发者都会使用console来进行调试&#xff0c;但它能做的绝不仅限于调试。 最常见的控制台方法 作为开发者&#xff0c;最常用的 console 方法如下&#xff1a; 控制台打印结果&#xff1a; 今天我分享的是一些 co…

Vue3项目中快速引入ElementUI框架

ElementUI介绍 ElementUI是一个强大的PC端UI组件框架&#xff0c;它不依赖于vue&#xff0c;但是却是当前和vue配合做项目开发的一个比较好的ui框架&#xff0c;其包含了布局&#xff08;layout)&#xff0c;容器&#xff08;container&#xff09;等各类组件&#xff0c;基本上…

qutip,一个高级的 Python 量子力学研究库!

目录 前言 安装 特性 基本功能 量子态的创建和操作 量子态的测量 示例代码 动力学模拟 高级功能 退相干和噪声模拟 控制和优化 量子信息学工具 实际应用场景 量子态演化研究 量子计算机模拟 量子纠错协议 总结 前言 大家好&#xff0c;今天为大家分享一个高级的 Pytho…

【C++对于C语言的扩充】函数重载、引用以及内联函数

文章目录 &#x1f680;前言&#x1f680;函数重载注意&#xff1a;✈️为什么C可以实现函数重载&#xff0c;而C语言却不行呢&#xff1f; &#x1f680;引用✈️引用的特性✈️C中为什么要引入引用✈️引用与指针的区别 &#x1f680;内联函数✈️内联函数特性 &#x1f680;…

ClickHouse--17--聚合函数总结

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 环境1.创建clickhouse表2.插入数据 函数(1)count&#xff1a;计算行数(2)min&#xff1a;计算最小值(3)max&#xff1a;计算最大值(4)sum&#xff1a;计算总和&…

创新实训2024.04.11日志:self-instruct生成指令

1. 参考文献 代码&#xff1a;https://github.com/yizhongw/self-instruct论文&#xff1a;https://arxiv.org/abs/2212.10560 2. 前沿论文阅读 2.1. self-instruct技术的优势 作者在文章中提到&#xff1a; The recent NLP literature has witnessed a tremendous amount …

STM32H7的8个串口fifo收发(兼容232和485)

STM32H7的8个串口fifo收发&#xff08;兼容232和485&#xff09; 串口硬件串口时序串口高级特性同步和异步的区别单工、半双工、全双工的区别 STM32H78个串口fifo驱动定义数据结构uart_fifo.huart驱动包括中断配置等 应用示例RS485深入理解 仅供学习。 USART 的全称是 Universa…

【C++】开始使用stack 与 queue

送给大家一句话&#xff1a; 忍受现实给予我们的苦难和幸福&#xff0c;无聊和平庸。 – 余华 《活着》 开始使用queue 与 stack 1 前言2 stack与queue2.1 stack 栈2.2 queue 队列2.3 使用手册 3 开始使用Leetcode 155.最小栈牛客 JZ31 栈的弹出压入序列Leetcode 150.逆波兰表达…