[数据结构链表题] 链表的中间结点

在这里插入图片描述

题目描述如下:

给你单链表的头结点 head ,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。

在这里插入图片描述
输入:head = [1,2,3,4,5]
输出:[3,4,5]
解释:链表只有一个中间结点,值为 3 。

解题思路:

第一步:定义快慢指针

定义一个快指针和一个慢指针从头开始遍历

让快的指针每次走两步,让慢的指针每次走一步,

当快的指针走完时,慢的指针刚好走到中间节点

我们知其然 也要知其所以然.

所以这是为什么呢?

因为快的指针的速度是慢的指针的2倍,所以快的指针遍历完时,刚好慢的指针走到中间

步骤如下:

定义一个快指针:fast

ListNode fast = head;

定义一个慢指针slow

ListNode slow = head;

使用一个while循环来遍历链表,结束条件是

fast != null && fast.next != null

注意事项:

这个顺序不可以写反了,否则会出现空指针异常
以下这个写法会出现空指针异常的情况…

fast.next != null && fast != null

具体细节:

那么快的指针如何走两步呢?
聪明的你一定已经想到啦~~

fast = fast.next.next;

慢的指针如何走一步呢?

slow = slow.next;

最后我们再把找到的中间节点返回即可

return slow;

完整代码如下:

public ListNode Middle(ListNode head){
	ListNode fast = head;
	ListNode slow = head;


	while(fast != null && fast.next != null){
		fast = fast.next.next;
		slow = slow.next;
	}


	return slow;
}

该题目在力扣网上的链表的中间节点

快去试试吧~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值