有环单链表的相关操作

数据结构域-单链表 单链表反转 反转第一个节点: 反转第二个节点: 反转第三个节点: 最后一个节点反转完成,把头指针指向pPre: 从上面的演化过程我们可以得出以下算法: bool ReverseList(CLink* head) { if (!head) { return false; } CLink* pCur = head; CLink* pNext = nullptr; CLink* pPre = nullptr; while (pCur) { pNext = pCur->next; pCur->n 阅读详情
#include<iostream>
#include <vector>
using namespace std;
struct ListNode
{
    int val;
struct ListNode *next;
ListNode(int x): val(x),next(NULL) {}
};


class CreatList
{
   public:
      ListNode *Creat(vector<int> A)
      {
      if(A.empty())
        return NULL;
       ListNode *head=new ListNode(A[0]),*p=head;
       for(vector<int>::iterator iter=A.begin()+1;iter!=A.end();iter++)
       {
      (*p).next=new ListNode(*iter);
  p=(*p).next;
       }
       return head;
      }
      ListNode *Creat1(vector<int> A)
      {
      if(A.empty())
        return NULL;
       ListNode *head=new ListNode(A[0]),*p=head,*tmp;
       int count=0;
       for(vector<int>::iterator iter=A.begin()+1;iter!=A.end();iter++)
       {
    count++;
      (*p).next=new ListNode(*iter);
  p=(*p).next;
  if(count==3)
    tmp=p;
       }
       p->next=tmp;
       return head;
      }      
};
//判断是否为有环链表 
bool chkLoop(ListNode* head)
      {
        if(!head)
            return false;
        ListNode *slow=head,*fast=head;
        while(((*fast).next&&(*(*fast).next).next))
        {
            slow=(*slow).next;
            fast=(*(*fast).next).next;
if(slow==fast)
break;
        }
        if(!(*fast).next||!(*(*fast).next).next)
            return false;
        return true;
      }
//找到有环链表的入口 
ListNode* findLoop(ListNode* head)
      {
        if(!head)
            return NULL;
        ListNode *slow=head,*fast=head;
        while(((*fast).next&&(*(*fast).next).next))
        {
            slow=(*slow).next;
            fast=(*(*fast).next).next;
if(slow==fast)
break;
        }
        if(!(*fast).next||!(*(*fast).next).next)
            return NULL;
        slow=head;
        while(slow!=fast)
{
               slow=slow->next;
               fast=fast->next;
            }
        return slow;
      }
    
void print(ListNode *head)
      {
      ListNode *p=head;
      while(p)
      {
        cout<<(*p).val<<" ";
        p=(*p).next;
         }
         
         cout<<endl;
      }
//有环链表打印 
void print1(ListNode *head)
      {
      ListNode *p=head;
      ListNode *head_c=findLoop(head);
      int count=0;
      while(p)
      {
      if(p==head_c&&(count==1))
        break;
      if(p==head_c)
       count=1;
        cout<<(*p).val<<" ";
        p=(*p).next;
         }
         
         cout<<endl;
      }
int main()
{


    int a[7] ={1,2,3,4,5,6,7},b[5]={2,4,6,8,10};
    vector<int> arr(a,a+7),brr(b,b+5);
    CreatList C;
    ListNode *head_a=C.Creat(arr);
    ListNode *head_b=C.Creat1(brr);
    print(head_a);
    if(chkLoop(head_b))
       cout<<"this is a loop list"<<endl;
    print1(head_b);
return 0;
【整理自用】单链表问题(一) 单链表 LeetCode上的定义: struct ListNode 单链表的结构体 { int val; 节点值 ListNode *next; 节点下一个地址 ListNode(int x):val(x),next(NULL){}; 构造函数 }; 从头到尾打印单链表 思路: 1.由于递归相当于是堆栈结构,后进先... 阅读详情

相关推荐

参数估计Picard迭代在非线性常微分方程参数估计中的应用研究(Matlab代码实现)

内容概要:本文系统研究了Picard迭代法在非线性常微分方程参数估计中的应用,深入阐述了该方法的数学原理及其在参数辨识中的收敛性与稳定性优势。通过构建最小化误差的目标函数,并结合数值积分技术,采用迭代方式逐步逼近系统的真实参数值,有效解决了非线性动态系统中因缺乏解析解而难以进行精确建模的问题。文中提供了完整的Matlab代码实现,涵盖模型定义、迭代求解、参数更新与结果可视化等关键节,增强了方法的可操作性与工程实用性。研究通过典型非线性系统案例验证了算法的有效性,展示了其在科学计算与工程建模中的良好适应性与推广潜力。; 适合人群:具备常微分方程理论、数值分析基础及Matlab编程能力,从事系统建模、参数辨识、动力学仿真等相关方向的研究生、科研人员和工程技术开发者。; 使用场景及目标:①解决实际工程中非线性微分方程模型的未知参数估计问题;②深入理解Picard迭代法在科学计算中的实现机制与数值特性;③为学术论文复现、科研项目开发或课程设计提供可运行、易调试的技术方案与代码参考。; 阅读建议:建议读者结合文中的数学推导与Matlab代码逐行分析,重点关注迭代流程、目标函数构造与数值积分的耦合实现,通过修改模型结构或噪声条件进行扩展实验,以深化对算法鲁棒性与适用边界的理解。配套资源可通过指定公众号和网盘链接获取,推荐同步学习以加速科研进程。

单链表的创建、赋值 C++示例

#include &lt;iostream&gt; using namespace std; struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; ListNode* CloneList(ListNode* pHea...

francis_xd的博客 6944

XYF.SHX

XYF.SHX

单链表的基本操作(三)两个链表的交和

目录单链表的交:单链表 单链表的交: 用到的LinkList类 /** * @ClassName Intersect * @Description 单链表的交 * @Author lzq * @Date 2018/12/8 19:35 * @Version 1.0 **/ public class Intersect { /** * 创建交点 ...

中都 973

创建单链表赋值,要求遍历能输出1~9

用表头创建单链表,用头插法创建链表,遍历的结果是9 8 7 6 5 4 3 2 1       具体的源程序如下:#include #include #define OK 0 #define ERROR -1 #define MALLOC_ERROR -2 typedef int ElementType; typedef struct node {

qq_36631131的博客 1万+

单链表是否存在相关操作

给定一个单链表, 1 判断该连表是否存在 2 如何知道的长度 3 如何找到的连接点 4 连表的长度  定义一个节点: public class Node { public String value ; public Node next ; public String getValue() { return value; } public void setV

s20082043的专栏 425

算法通关村第一关——黄金挑战 | 与双向链表

按照快慢的方式寻找到相遇的位置,然后将两指针分别放到链表的表头和相遇的位置,以相同的速度推进,即可找到的入口。在确定的时候利用的hash也可以查找形的入口,只是返回不是true和false了,返回的是结点。第二种情况:相距两个空格,slow走一步到达4,fast走两步到达3,此时又是第一种情况。遍历的时候将元素放入map中,如果有就一定会发生碰撞,碰撞的位置就是的入口。第一种情况:相距一个空格,slow走一步,fast走两步,则在三的位置相遇。链表中有一个,其尾部连接到第二个节点。

m0_63690778的博客 1856

自己手动实现单链表的头插 、尾插、删除、逆置、倒数第K个节点、判断是否有、求其入口点、合并有序单链表

class Link<T extends Comparable<T>> { /** * 单链表的节点类型 * @param <T> */ static class Entry<T> { T data; // 链表节点的数据域 Entry<T> next; //...

weixin_44579258的博客 253

单链表的基本操作

链表包括循单链表和循双链表 循单链表的结点类型与非循单链表相同,把非循单链表改成循单链表只需要将非循单链表的尾结点next指针由原来的NULL改为指向头节点,自此就将非循单链表形成看一个,从表中的任一结点出发均可找到链表中其他的结点,这就是带头节点的循单链表。 循单链表操作单链表基本一致,差别在于遍历链表时,判别当前指针p是否指向表尾结点的终止条件不同: 单链表:p->next != NULL 循单链表:p->next != h

wo_ai_luo_的博客 794

Java带头节点单链表的增删合并以及是否有

带头节点单链表 1.优势: 1)当链表为空时,指针指向头结点,不会发生null指针异常 2)方便特殊操作(删除第一个有效节点或者插入一个节点在表头) 3)单链表加上头结点之后,无论单链表是否为空,头指针始终指向头结点,因此空表和非空表的处理也统一了,方便了单链表操作,也减少了程序的复杂性和出现bug的机会。 4)代码更加简单易懂 2.相关操作 1)建立单链表 即建立一个头结点 ...

weixin_30565327的博客 185

单链表相关操作

结构定义: struct ListNode { int val; ListNode *next; }; 1.头插法创建链表 ListNode* createListFromHead() { ListNode *list = new ListNode; list->next = NULL; ListNode *s;...

weixin_34383618的博客 183

四道有趣的单链表面试题(单链表反序、找出链表的中间元素、链表排序、判断一个单链表是否有

以下给出链表结点的数据结构: 1  typedef struct _list_node 2 { 3     double keyVal; 4     struct _list_node *next; 5 }ListNode; Q1 单链表的反序  1 ListNode* reverseList(ListNode* head)  2 {  3     ListNode

merryken的专栏 637

焊接变位机_1.rar

焊接变位机_1.rar

基于多尺度集成极限学习机回归(Matlab代码实现)

内容概要:本文详细介绍了一种基于多尺度集成极限学习机(Extreme Learning Machine, ELM)的回归方法,并提供了完整的Matlab代码实现。该方法通过构建多尺度特征表示与集成学习机制,有效提升了ELM在处理非线性、高维复杂数据时的预测精度与模型鲁棒性,特别适用于时间序列回归任务。文档不仅阐述了算法的核心原理与技术流程,还系统展示了其在风电功率预测等工程场景中的应用潜力。同时,文中附带了丰富的科研仿真案例集合,涵盖智能优化算法、深度学习、信号处理、电力系统调度等多个前沿方向,体现了多学科交叉融合的技术优势与实践价值。; 适合人群:具备一定Matlab编程能力,从事科学研究或工程应用的研究生、科研人员及工程技术开发者,尤其适合专注于机器学习、智能算法优化、新能源预测与电力系统建模等相关领域的专业人员。; 使用场景及目标:①用于风电、光伏、负荷等时间序列数据的高精度回归预测任务;②为科研工作者提供可复现的多尺度集成ELM模型代码框架,支持快速算法验证与二次开发;③满足实际工程项目中对高效建模、实时预测与智能决策的技术需求。; 阅读建议:建议读者结合所提供的Matlab代码进行动手实践,深入理解多尺度特征构造与集成策略的设计思想,同时可参考文档中其他相关算法案例进行横向比较与综合应用,以提升整体科研创新能力。

精密钟表配件叉片插针组装机 -原创设计.rar

精密钟表配件叉片插针组装机 -原创设计.rar

精密制造基于桥式三坐标的深孔同轴度测量:半导体流体控制阀PTFE阀体形位公差定量检测方案

内容概要:本文针对高精密制造中深孔内部特征难以精确定量测量的技术瓶颈,提出了一套基于中图仪器Mars Classic 10128桥式三坐标测量机的解决方案,重点解决长径比大于5:1的PTFE四氟阀体深孔同轴度与圆柱度测量难题。通过采用自主研发的深孔加长测针组件与CP500S扫描测头,克服了传统接触式测针刚性不足和光学设备视场遮挡的问题,实现了对深孔内部形貌的连续扫描与三维拓扑建模,输出精度可达≤0.025mm,建立了可追溯、可量化的测量标准流程。; 适合人群:从事半导体流体控制阀、高精密PTFE阀体等零部件设计、制造与质量检测的工程技术人员及测试管理人员,具备一定几何公差与三坐标测量基础知识的专业人员; 使用场景及目标:①解决“影像仪测不到深孔内部”或“深孔长径比大于5怎么测”的实际工程问题;②实现对深孔同轴度、圆柱度等形位公差的定量评价,替代传统通止规定性判断;③为工艺优化、刀具补偿和质量追溯提供精准数据支持; 阅读建议:此资源作为技术应用指南,兼具设备选型参考与测量方法指导价值,建议结合实际检测案例对照操作,并联系中图仪器技术中心获取实测验证支持。

上一篇: 机器人的运动范围
下一篇: 有环单链表的原理
qq_38211852
博客等级 码龄9年 62粉丝 118原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值