[反转链表] [合并两个有序链表][分割链表]

news2024/10/5 18:27:21

这里写目录标题

  • 反转链表
  • 合并两个有序链表
  • 分割链表

反转链表

1、题目:
1
1
2.思路
 思路1:建立一个newHead,取一个节点进行头插。具体做法如下!
1
建立一个newHead(新头),由于一个节点里面存的是下一个节点的地址,如果取一个节点下来进行头插,那么,要取的下一个节点的地址找不到,因此定义n1,n2,n1用来往下拿结点进行头插,n2预备下一次要的节点 ,代码如下!!!

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
    if(head == NULL)
    {
        return NULL;
    }
    struct ListNode* newHead = NULL;
    //n1为向下取得插入的节点
    struct ListNode* n1 = head;
    //n2是给n1准备的节点
    struct ListNode* n2 = head->next;
    while(n1)
    {
        n1->next = newHead;
        newHead = n1;
        n1 = n2;
        //当n2为NULL时,n2没有取得节点了
        if(n2)
        {
            n2 = n2->next;
        }
    }
    return newHead;
}

 思路2:把指针翻转,把指针反转的意思是,把存节点的地址交换,定义三个指针n1,n2,n3,n1 = NULL,n2 = head,n3 = head->next,n2为第一个节点翻转,n2->next = n1,n2里面原来存的地址找不到,因此要n3存下一个节点的地址,这样这个题就可以反转了!!!
1

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

合并两个有序链表

1、题目:
1
2、思路:
  这个题建立一个新链表,取小的数尾插即可,这儿有一些技巧,可以建立一个头结点,直接尾插,这样就省去了考虑newHead为NULL的情况,这个方法,在一些题中有妙用!!!``

struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
    if(l1==NULL)
    {
        return l2;
    }
    if(l2==NULL)
    {
        return l1;
    }
    //处理这个,建立一个头节点,把为NULL的一种可能性去掉
    struct ListNode* tmp = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* tail= tmp;
    while(l1&&l2)
    {
        if(l1->val<l2->val)
        {
            tail->next = l1;
            tail = l1;
            l1 = l1->next;
        }
        else{
            tail->next = l2;
            tail = l2;
            l2 = l2->next;
        }
    }
    if(l1)
    {
        tail->next = l1;
    }
     if(l2)
    {
        tail->next = l2;
    }
    return tmp->next;
}

下面是一个正常的做法!!!

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
    if(l1 ==NULL)
    {
        return l2;
    }
    if(l2 == NULL)
    {
        return l1;
    }
    struct ListNode* newHead,*tail;
    newHead  = NULL;
    while(l1&&l2)
    {
        if(l1->val<l2->val)
        {
            if(newHead == NULL)
            {
                newHead = tail = l1;
            }
            else{
                tail->next = l1;
                tail = l1;
            }
            l1 = l1->next;
        }
        else{
            if(newHead == NULL)
            {
                newHead = tail = l2;
            }
            else{
                tail->next = l2;
                tail = l2;
            }
            l2 = l2->next;
        }
    }
    if(l1)
    {
        tail->next = l1;
    }
     if(l2)
    {
        tail->next = l2;
    }
    return newHead;
}

分割链表

1、题目:
1
2、思路:
 建立两个链表,一个是<x的链表,一个是>=x的链表,最后把这两个链表组合起来,返回头即可

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

//建立两个链表
//一个小于x
//一个大于等于x
struct ListNode* partition(struct ListNode* head, int x){
  /*  if(head == NULL)
    {
        return NULL;
    }*/
    struct ListNode* litterHead = ( struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* litterTail = litterHead;
    struct ListNode* biggerHead = ( struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* biggerTail = biggerHead;
    struct ListNode* cur = head;
    while(cur)
    {
        if(cur->val<x)
        {
            litterTail->next =cur;
            litterTail = cur;
            cur = cur->next;
        }
        else
        {
            biggerTail->next = cur;
            biggerTail = cur;
            cur = cur->next;
        }
    }
    biggerTail->next = NULL;
    litterTail->next = biggerHead->next;
    return litterHead->next;
}

完结!!!

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

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

相关文章

华夏基金“冰火两重天”:产品增量不增值,靠什么赢得用户?

近日&#xff0c;华夏基金发布关于华夏野村日经225交易型开放式指数证券投资基金&#xff08;QDII&#xff09;&#xff08;下称“华夏野村日经ETF”&#xff09;二级市场交易价格溢价风险提示及临时停牌公告。 公告内容显示&#xff0c;华夏野村日经ETF二级市场交易价格明显高…

DFT计算杂谈调查问卷

为更好了解公众号受众对于DFT计算的了解情况以及目标需求&#xff0c;目的以更好更准确并实用地推送给公众号受众所需要的文章&#xff0c;所以本次推送发布调查问卷并收集填写者相关信息。 调查问卷调查内容仅与公众号运营和DFT计算相关&#xff0c;所收集信息仅用作公众号受众…

如何选择和配置适合医院病历管理系统的MySQL版本?

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

7+细胞焦亡+ceRNA+实验验证,如何脱离套路求创新?

导语 今天给同学们分享一篇生信文章“Dissection of pyroptosis-related prognostic signature and CASP6-mediated regulation in pancreatic adenocarcinoma: new sights to clinical decision-making”&#xff0c;这篇文章发表在Apoptosis期刊上&#xff0c;影响因子为7.2。…

操作系统的灵魂--MMU详解

虚拟内存是现代操作系统中最伟大的发明之一。它为每个进程提供了一个一致的、私有的地址空间&#xff0c;让每个进程产生了一种自己在独享主存的错觉。 为了讲清楚MMU是如何一步一步完成地址翻译&#xff0c;取出数据的&#xff0c;本篇文章在前4节中讲解了虚拟内存中一些重要…

Aspx漏洞总结

第一部分&#xff0c;.NET项目当中的dll都可以进行反编译&#xff1a; 在java中有很多jar包&#xff0c;而在.NET框架中的bin中对应有很多DLL文件&#xff0c;bin下面都是可执行文件&#xff0c;这些文件都是很多代码封装的&#xff0c;想要查看源码&#xff0c;都需要通过反编…

vscode运行python,终端能正常运行,输出(Code Runner)不能正常运行

右键->Run Code报错&#xff1a; [Done] exited with code9009 in 0.111 seconds 我的解决方案&#xff1a;仔细检查自己选的python.exe&#xff08;解释器&#xff09;在path环境变量中是否存在或路径是否正确&#xff01;&#xff01;&#xff01; 我就是太自信了&#xf…

STL第三讲

第三讲 stl六大部件&#xff1a;算法是函数模板&#xff0c;其他的是类模板 算法形式&#xff1a;传入两个迭代器&#xff08;第三个参数可能有&#xff1a;一个比较的准则 算法需要的所有信息从迭代器获取 迭代器分类 基于红黑树的结构是双向迭代器&#xff1b; 基于hash的取…

idea——git提交到本地记录如何退回/删除

目录 一、git提交到本地记录如何退回/删除 一、git提交到本地记录如何退回/删除 git提交到本地记录&#xff0c;如下图【更新】记录&#xff0c;表示本次提交到git本地需要退回/删除的操作&#xff1a; 选中项目&#xff0c;右键点击【git】——>【Show History】——>…

苹果笔记本MacBook电脑怎么卸载软件?三种方法快速卸载软件

苹果笔记本MacBook电脑是一款非常流行的电脑&#xff0c;但是有时候我们可能需要卸载一些不需要的软件。下面是一些简单的步骤&#xff0c;可以帮助您在MacBook电脑上卸载软件。 苹果笔记本MacBook电脑怎么卸载软件&#xff1f;三种实用方法快速卸载软件&#xff01; 方法一&a…

【数据分享】2023年全球范围土壤数据集HWSD2.0(7个土壤深度/40多种土壤指标)

土壤数据&#xff0c;包括土壤类型、土壤酸碱度、土壤沙含量等指标&#xff0c;对于农业、林业、园艺、环境保护等领域都非常重要。 本次我们为大家带来的是2023年1月份发布的全球范围的土壤数据库。该数据的核心信息如下&#xff1a; ①该数据是基于联合国粮农组织&#xff0…

云HIS为连锁医院机构提供统一医院管理解决方案

云HIS重建统一的信息架构体系&#xff0c;重构管理服务流程&#xff0c;重造病人服务环境&#xff0c;向不同类型的医疗机构提供SaaS化HIS服务解决方案。 云HIS优势 1、云端数据优势 在传统的HIS模式里&#xff0c;数据存于医院本身的服务器机组&#xff0c;一旦发生故障&…

Python学习04—基本图形绘制

通过一个案例来初步认识Python的图形绘制 案例&#xff1a;绘制Python蟒蛇 #PythonDraw.py import turtle turtle.setup(650,350,200,200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("purple") turtle.seth(-40) for i…

使用WAF防御网络上的隐蔽威胁之代码执行攻击

什么是代码执行攻击&#xff1f; 攻击者通过漏洞在目标系统上运行恶意代码。 这通常是由于应用程序或系统的安全漏洞&#xff0c;如输入验证不足、软件缺陷或配置错误。这些漏洞为攻击者提供了注入和执行恶意代码的机会。 攻击的类型 远程代码执行&#xff08;RCE&#xff…

linux中用户及用户组信息

1&#xff0c;linux通过用户名和口令来验证用户的身份。 2&#xff0c;几个用户可以组成一个用户组。 3&#xff0c;useradd工具添加用户&#xff0c;groupadd命令添加用户组。 4&#xff0c;history 命令查看用户在Shell中执行命令的历史记录。 5&#xff0c;userdel命令删…

jsjiami.v7介绍

jsjiami.v7介绍 jsjiami.v7是一款在线的JavaScript加密工具&#xff0c;它可以对JavaScript代码进行混淆、压缩、加密等操作&#xff0c;提高代码的安全性和运行效率。jsjiami.v7是jsjiami.v6的升级版&#xff0c;它在2023年1月17日发布&#xff0c;支持新版ES语法&#xff0c…

第二百八十四回

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了下拉刷新组件相关的内容&#xff0c;本章回中将介绍WillPopScope组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的WillPopScope组件是一种事件拦截类组件&#xff0c;它没有具体…

php:规范小数位数,例:10.00展示为10,10.98展示为10.98

代码 <?php$value 10.98; // 原始的双精度类型值if ($value floor($value)) {$formattedValue number_format($value, 0); // 10.00 转换为 10echo $formattedValue;} else {$formattedValue number_format($value, 2); // 10.98 保持为 10.98echo $formattedValue;} …

某C2鸡肋漏洞分析:你的CS安全吗?

CobaltStrike是一个知名的红队命令与控制框架&#xff0c;采用Beacon <-> TeamServer <-> Client架构。TeamServer存在受限路径穿越写文件与反序列化漏洞&#xff0c;可以被认证后客户端恶意利用。Client存在反序列化漏洞&#xff0c;可以被RogueCS攻击。 山寨威胁…

注册美区(US)IOS AppleId

根据这个操作&#xff1a; 【2024年】五分钟注册美区AppleID&#xff0c;手把手教&#xff0c;稳定且耐用&#xff01; - 知乎 (zhihu.com) 其中需要注意&#xff1a;付款方式&账单地址 的时候需要按照以下操作 总结&#xff1a; 1、通用-语言地区设置为us美国英语 2、…