首页 > 其他分享 >链表的中间结点

链表的中间结点

时间:2024-09-22 11:20:11浏览次数:13  
标签:结点 slow ListNode cur head fast 链表 中间

链表的中间结点
在这里插入图片描述

思路1:
1.若链表为空,直接返回null
2.若链表不为空,我们可以先求的链表的长度,让得到的链表长度/2,再让ListNode cur=head,cur走上链表长度/2次,就可以返回中间节点了

    public int size(ListNode head){
        if(head==null){
            return 0;
        }
        ListNode cur=head;
        int count=0;
        while(cur!=null){
            count++;
            cur=cur.next;
        }
        return count;
    }
    public ListNode middleNode(ListNode head) {
         int count=size(head)/2;
        ListNode cur=head;
        while(count!=0){
            cur=cur.next;
            count--;
        }
        return cur;
    }
 } 

由于思路1遍历了两次链表,我们只希望遍历一次就可以找到中间结点

思路2:

1.若链表为空,直接返回null
2.若链表不为空, 我们定义两个指向节点的对象分别是fast和slow fast每次走两步,slow每次走一步 根据路程公式s=vt,fast的速度是slow的两倍,当fast走到终点时,slow此时所指向的节点就是中间节点
此时会有一个问题就是链表的长度为偶数和奇数的两种情况:

在这里插入图片描述

在这里插入图片描述

    public ListNode middleNode(ListNode head) {
         if(head==null){
            return head;
        }
        ListNode fast=head;
        ListNode slow=head;
        while (fast!=null&&fast.next!=null){
            fast=fast.next.next;
            slow=slow.next;
        }
        return slow;
    } 
}

标签:结点,slow,ListNode,cur,head,fast,链表,中间
From: https://blog.csdn.net/2302_81707171/article/details/142433448

相关文章

  • 常见中间件漏洞靶场(tomcat)
    1.CVE-2017-12615开启环境查看端口查看IP在哥斯拉里生成一个木马访问页面修改文件后缀和文件内容放包拿去连接2.后台弱⼝令部署war包打开环境将前边的1.jsp压缩成1.zip然后改名为1.war访问页面进行上传在拿去连接3.CVE-2020-1938打开环境访问一下来......
  • 中介者模式:如何通过中间层来解决耦合过多的问题?
    中介者模式理解起来并不难,代码实现简单,学习难度也很小,只要合理充分地应用这个模式,往往就能够解决一些意想不到的问题。那这到底是怎样一个模式?多用于什么场景中?为什么使用?该怎么使用?下面我们一起来看看吧。一、模式原理分析中介者模式的原始定义是:中介者对象封装了一组对象之间的......
  • 双链表定义与操作
    双链表的定义 与单链表不同的地方在于指针,双链表的指针多了个前向指针。点击查看代码typedefstructDNode{ ElemTypedata; DNode*prior,*next;}*DLinkList,DNode;双链表的初始化(initial) 双链表的创建也可分为带头节点和不带头节点(这里只放了不带头的初始化)。......
  • 链表(3)链表的基本操作
            单链表的基本操作主要有;①创建链表;②输出链表;③査我结点;④插入结点,⑤鹏除结点;⑥重组链表。下面分别进行介绍。一.创建链表        创建链表是指在程序运行时,进行动态内存分配,创建若千个结点,并把这些结点连接成串,形成一个链表。在进行动态......
  • 中间件的类型:不同的风格
    读完上一篇文章后,让我们看看expressjs中的中间件类型,中间件有不同的风格(?),每种都有独特的用途:1。应用级中间件:这就像主要成分。您将其添加到整个应用程序中,它会根据每个请求运行。?app.use((req,res,next)=>{console.log('thisrunsoneveryrequest!');next();});......
  • 【数据结构】链表及其代码实现
    之前我们已经学习了顺序表,现在让我们来进行对链表的学习!!!【顺序表详解】......
  • 19080 反转链表
    ###思路1.初始化三个指针:`prev`(前驱节点),`curr`(当前节点),`next`(后继节点)。2.遍历链表,将当前节点的`next`指针指向前驱节点,实现反转。3.移动三个指针,继续反转下一个节点,直到遍历完整个链表。4.最后,将头节点指向新的头节点(即原链表的最后一个节点)。###伪代码```funct......
  • 【深度学习|可视化】如何以图形化的方式展示神经网络的结构、训练过程、模型的中间状
    【深度学习|可视化】如何以图形化的方式展示神经网络的结构、训练过程、模型的中间状态或模型决策的结果??【深度学习|可视化】如何以图形化的方式展示神经网络的结构、训练过程、模型的中间状态或模型决策的结果??文章目录【深度学习|可视化】如何以图形化的方式展示神经......
  • 单链表定义和操作
    首先是单链表的定义,使用结构体定义两个部分,分别是数据域和指针域。点击查看代码typedefstructLNode{ ElemTypedata; structLNode*next;}LNode,*LinkList;这里可以使用typedef关键字将后续的定义简化。具体例子如下:如果这样定义structLNode{}的话。在定义LNode类......
  • 循环链表实现约瑟夫问题
    问题描述利用循环链表实现:读入2个整数A和B,然后输出2个整数C和D。其中A表示人数,这些人的id分别为1,2,3,...A,他们按照id依次围成一圈。从id为1的人开始报数,报到B的人退出圈,然后从下一个人开始重新报数,报到B的人又退出圈,如此反复,直到剩下2人为止。C和D为剩下的......