链表的中间节点
题目描述
给定一个头结点为 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
题解(java)
class Solution {
public ListNode middleNode(ListNode head) {
//定义快慢指针,从同一起点出发
ListNode fast = head;
ListNode slow = head;
if(head == null || head.next == null){
return head;
}
while(fast.next != null){
//当有两个中间节点时,返回第二个节点
if(fast.next.next == null){
return slow.next;
}else{
slow = slow.next;
fast = fast.next.next;
}
}
return slow;
}
}
图示
详解(快慢指针)
- 1>.判断该链表是否为空链表或只有一个节点的链表,如果是返回head即可
- 2>.定义快慢指针在同一起点,快指针的速度为慢指针的二倍
【当只有一个中间节点时(即链表节点个数为单数),fast指针遍历至尾节点时,返回slow即可,当有两个中间节点时(即链表个数为双数时),fast.next为尾节点时,返回slow.next】
难点
掌握快慢指针即可
Tips
- 注意:这里要分奇偶节点数两种情况
声明
- 原作者:E.L.E
- <本文章著作权归作者所有,商业转载请获得原作者允许,非商业转载请注明来处>
- <欢迎大家评论>