免费网站建站 知乎,伪原创嵌入网站,商业网站的设计与推广系统,菲律宾 网站开发公司个人主页#xff1a;白日依山璟
专栏#xff1a;Java|数据结构与算法|每日一题 1.题目描述
给你单链表的头结点 head #xff0c;请你找出并返回链表的中间结点。
如果有两个中间结点#xff0c;则返回第二个中间结点。
示例1 输入#xff1a;head [1,2,3,4,5] 输出白日依山璟
专栏Java|数据结构与算法|每日一题 1.题目描述
给你单链表的头结点 head 请你找出并返回链表的中间结点。
如果有两个中间结点则返回第二个中间结点。
示例1 输入head [1,2,3,4,5] 输出[3,4,5] 解释链表只有一个中间节点值为3 示例2 输入head [1,2,3,4,5,6] 输出[4,5,6] 解释链表只有两个中间节点值分别为3和4返回第二个节点。 提示
链表的节点的范围是[1,100]1 Node.val 100
题目链接
2. 思路
判断头结点的next是否为空如果是直接返回头结点定义两个指针slow和fast都指向头结点。循环遍历链表每次fast指向fast的next的next每次移动两步slow指向slow的next每次移动1步循环条件fast null循环结束链表元素个数为偶数时fast.next null循环结束链表元素个数为奇数时。 3.代码
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/
class Solution {public ListNode middleNode(ListNode head) {if (head.next null) {return head;}ListNode slow head;ListNode fast head;while (fast ! null fast.next ! null) {fast fast.next.next;slow slow.next;}return slow;}
}运行结果