单链表题-ysf-反转-中间节点-回文-合并-分割

环形链表的约瑟夫问题_牛客题霸_牛客网

经典的约瑟夫环

 #include <stdint.h>
#include <stdlib.h>
//创建链表
typedef struct ListNode ListNode;
 ListNode* buyNode(int x){
    ListNode* newNode=(ListNode*)malloc(sizeof(ListNode));
    if(newNode==NULL){
        exit(1);
    }
    newNode->val=x;
    newNode->next=NULL;
    return newNode;
 } 
 //创建新节点
ListNode* createList(int n){
    ListNode* phead=buyNode(1);
    ListNode* ptail=phead;
    for(int i=2;i<=n;i++)
    {
        ptail->next=buyNode(i);
        ptail=ptail->next;
    }
    ptail->next=phead;
    return ptail;//返回ptail,因为需要有前一个指针和后一个指针

}

int ysf(int n, int m ) {
    // write code here
    ListNode* prev=createList(n);
    ListNode* pcur=prev->next;
    int count=1;
    while(pcur->next!=pcur){
        if(count==m){
            prev->next=pcur->next;//先让prev指向pcur的next要不然会找不到pcur
            free(pcur);
            pcur=prev->next;
            count=1;//置为1重新计数
        }
        else{
            prev=pcur;
            pcur=pcur->next;
            count++;
            
        }
    }
    return pcur->val;


}

. - 力扣(LeetCode)

反转链表

struct ListNode* reverseList(struct ListNode* head){
    if(head==NULL)
{
    return NULL;
}
struct ListNode* n1;
struct ListNode* n2;
struct ListNode* n3;
n1=NULL;
n2=head;
n3=head->next;

while(n2)
{
    n2->next=n1;
    n1=n2;
    n2=n3;
    if(n3)
    
    n3=n3->next;

}
return n1;
}

. - 力扣(LeetCode)

链表的中间节点 

struct ListNode* middleNode(struct ListNode* head) {
    struct ListNode*slow,*fast;;
    slow=fast=head;
    while(fast && fast->next)//不能写成while(fast->next && fast)
因为while会先判断前面的条件,而fast很可能直接就跑到空了,根本没有next属性导致报错
也就是短路性质
    {
        slow=slow->next;
        fast=fast->next->next;
    }
    return slow;
}



. - 力扣(LeetCode)

回文链表

核心思想:将链表反转后,比较后半部分是否相同

遍历链表找到中间节点,从中间节点为分割线去比较两边是否先相同

typedef struct ListNode ListNode;
ListNode* reverseList(ListNode* head){
    ListNode* n1=NULL;
    ListNode* n2=head;
    ListNode* n3=head->next;
    while(n2){
        n2->next=n1;
        n1=n2;
        n2=n3;
        if(n3){
            n3=n3->next;
        }
    }
    return n1;
}
bool isPalindrome(struct ListNode* head){
    if(head==NULL||head->next==NULL)
    {
        return true;
    }
    ListNode* fast=head;
    ListNode* slow=head;
    //遍历得到中间节点
    while(fast->next&&fast->next->next){
        slow=slow->next;
        fast=fast->next->next;
    }
    //右半部分反转后与前半部分比较
    ListNode* right=reverseList(slow->next);
    ListNode* cur=head;
    while(right){
        if(right->val!=cur->val){
            return false;
        }
        else{
            right=right->next;
            cur=cur->next;
        }
    }
    return true;
}

. - 力扣(LeetCode)

合并两个有序链表

typedef struct ListNode ListNode;
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
   if(list1==NULL)//如果list1为空,返回list2
   {
    return list2;
   }
    if(list2==NULL)
   {
    return list1;
   }
    ListNode*head,*tail;
    head=tail=(ListNode*)malloc(sizeof(ListNode));
   while(list1&&list2)//判断循环条件,有一个为空就跳出循环
   {
    if(list1->val<list2->val)//l1<l2的值
    {
       tail->next=list1;//把list1链接到tail后面
            tail=tail->next;//tail迭代往后走
        list1=list1->next;//list1迭代往后走
    }
    else{
       tail->next=list2;
        tail=tail->next;
        list2=list2->next;
    }
   }
    if(list1)
    {
        tail->next=list1;
    }
    if(list2)
    {
        tail->next=list2;
    }
    ListNode* ret=head->next;
    free(head);
    head=NULL;//动态申请的空间需要手动释放
    return ret;
}
    

. - 力扣(LeetCode)

分割链表

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你不需要 保留 每个分区中各节点的初始相对位置。

思路:创建两个新链表,一个放比特定值小的数,一个放大的然后链接起来;

注意事项:对于大链表中的尾节点,需要置空,要不会出现死循环;创建哨兵位,需要手动释放空间;让小链表的尾指向大链表哨兵位的next

struct ListNode* partition(struct ListNode* head, int x){
struct ListNode*lesshead,*lesstail,*greaterhead,*greatertail;
//开两个哨兵位,虚拟节点,方便尾插
lesshead=lesstail=(struct ListNode*)malloc(sizeof(struct ListNode));
lesstail->next=NULL;
greaterhead=greatertail=(struct ListNode*)malloc(sizeof(struct ListNode));
greatertail->next=NULL;
struct ListNode*cur=head;
while(cur)
{
    if(cur->val<x)
    {
        lesstail->next=cur;
        lesstail=cur;
    }
    else
    {
        greatertail->next=cur;
        greatertail=cur;
    }
    cur=cur->next;
}
lesstail->next=greaterhead->next;
greatertail->next=NULL;
struct ListNode* newhead=lesshead->next;
free(lesshead);
free(greaterhead);
return newhead;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Facebook国内账户与 Facebook海外账户的区别

Facebook国内户的封户速度和频率有时可谓令人崩溃&#xff0c;为这种情况伤脑筋的朋友&#xff0c;不妨考虑一下Facebook海外户&#xff0c;既不限额&#xff0c;又更稳定..... Facebook&#xff0c;Google 开企业广告账户/游戏代投 &#xff0b;V:Ukvo77 TG&#xff1a;ukv…

AIGC——Instant-Style文本到图像生成中的样式保留算法解析

0.概述 在过去的几年中&#xff0c;基于调整的扩散模型在广泛的图像个性化和定制任务中取得了显着的进展。然而&#xff0c;尽管有潜力&#xff0c;当前基于调整的扩散模型在生成和生成风格一致的图像方面仍然面临着一系列复杂的挑战&#xff0c;其背后可能有三个原因。首先&a…

震惊!原来cmd命令行还可以这么玩?!

不论是在程序开发&#xff0c;还是遇到一些系统问题&#xff0c;我们很多时候会用到cmd命令行来处理问题&#xff0c;而当我们在执行cmd命令的时候&#xff0c;经常遇到下面这样的问题&#xff1a; ①. 控制台内容复制出来换行了 这种场景在我们安装nodejs插件的时候&#xff0…

项目管理表格-项目总体计划(项目管理-项目经理干货资料Excel)

项目管理总体计划模板 1、项目基本信息 2、项目里程碑 3、项目干系人 4、项目团队组织架构管理 5、项目预算管理 6、项目项目任务计划管理 7、问题及风险管理 8、项目周报 9、项目相关要求 软件项目相关全套精华资料包获取方式①&#xff1a;点我获取 获取方式②&#xff1a;本…

如何实现Linux双网卡同时连接内网和外网的配置?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

百度百科怎么创建自己的公司

创建百度百科公司页面可以帮助提升企业知名度、提高搜索引擎排名、增强企业公信力、建立企业形象和行业权威。以下是创建公司百度百科的步骤&#xff1a; 准备阶段 收集资料 在开始撰写百度百科公司页面之前&#xff0c;首先需要收集公司的相关资料&#xff0c;包括公司的历史、…

社群推广遇见瓶颈?点这里,教你一招立马激活 | C1N短网址

社群推广在当下互联网营销里可是相当重要的一环啊&#xff0c;靠着社群的力量能迅速提升品牌知名度以及用户互动性。但在搞社群推广的过程中&#xff0c;那可是会碰到好多瓶颈的&#xff0c;这可让社群运营人员脑壳疼得很呐。 先来说说 01 社群人气不足&#xff1a;在社群推广中…

项目中使用Elasticsearch的API相关介绍

项目中使用Elasticsearch的API相关介绍 0、域映射类型 text&#xff1a;会分词&#xff0c;不支持聚合对当前搜索关键词&#xff0c;先自身分词&#xff0c;分成多个词&#xff0c;然后去一个一个的词去利用倒排索引去查询es索引库一般应用在搜索关键字匹配的字段的类型。 商…

电商数据分析的秘籍|数据采集渠道与工具|电商数据采集API接口

【数据采集渠道及工具选择】 进行电子商务数据分析与采集时常用的数据来源渠道有电子商务网站、店铺后台或平台提供的数据工具、政府部门、机构协会、媒体、权威网站数据机构、电子商务平台、指数工具等。

电子资源|基于SSM+vue的电子资源管理系统(源码+数据库+文档)​

电子资源管理系统 目录 基于SSMvue的电子资源管理系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 5.2.1管理员功能模块 5.2.2用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&am…

C++ I/O流(一)——输出流

一、IO流概念 IO流可分为输入流和输出流,用于从设备(如键盘、文件、网络等)读取数据或向设备写入数据。C++标准库提供了丰富的IO流类,包括iostream、fstream、stringstream等,分别用于处理控制台输入输出、文件输入输出和字符串流操作。 读操作:输入流中读取数据到程序中…

Nginx配置文件conf解释

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Nginx(“engine x”…

PHP黑魔法之strcmp与is_numeric绕过

1、strcmp绕过 PHP手册: int strcmp ( string $str1 , string $str2 )Return ValuesReturns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal 当输入的两个值为不是字符串时就会产生不预期的返回值 strcmp()在比较字符串和…

Java中的数据类型与变量

引言&#xff1a; 哈喽&#xff0c;各位读者老爷们大家好呀,long time no see!这里是小堇Java小课堂&#xff0c;在本课堂中我们将继续分享Java中的数据类型与变量&#xff0c;标识符&#xff0c;关键字等知识&#xff0c;那我们启程咯&#xff01; 数据类型与变量 1.字面变量…

MacOS docker 安装与配置

orbstack 安装 官网&#xff1a; https://orbstack.dev 下载链接&#xff1a;Download OrbStack Fast, light, simple Docker Desktop alternative 选择是Apple M系列处理器&#xff0c; 或 Intel系列处理器 到这里就安装好了Orbstack软件&#xff0c;下面开始配置docker 下…

QT状态机2-含终止状态的嵌套状态机

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)

【C++小语法技巧】命名空间和输入输出

在使用C语言编程过程中&#xff0c;C语言的要求之严格&#xff0c;编程过程之繁琐&#xff0c;大同小异的重复性工作&#xff0c;令C之父使用C语言编程时也深受其扰&#xff0c;于是乎C兼容C小语法诞生了 一、命名空间域&#xff08;解决C语言中命名冲突&#xff09; 1.定义命…

Java 8 Supplier函数式接口介绍及实战案例

介绍直接看这篇文章比较详细&#xff1a;【Java 基础篇】Java Supplier 接口详解 Supplier 是 Java 8 引入的一个函数式接口&#xff0c;它属于 java.util.function 包。Supplier 接口表示一个不接受任何参数但返回某种类型结果值的函数。它定义了一个 get() 方法&#xff0c;该…

HAProxy系列文章二《Patroni+ETCD+PG14+HAProxy的安装部署》

瀚高数据库 目录 文档用途 详细信息 文档用途 本文主要介绍Patroni架构下单点HAProxy的安装部署&#xff0c;通过单点HAProxy实现数据库的负载均衡。本文为HAProxy系列文章之一&#xff0c;其他相关文章请点击文档下方的相关文档链接进行详细查看&#xff0c;文章内不在赘述。…

Matlab进阶绘图第54期—密度散点图(概率密度版)

在之前的文章中&#xff0c;分享过Matlab密度散点图的绘制方法&#xff1a; 此版内容用到了一些点云数据处理中求取密度的知识&#xff0c;对部分人来说&#xff0c;可能有些不好理解。 于是&#xff0c;本期内容使用Matlab自带的ksdensity函数进行密度散点图(概率密度版)的绘…