前言
本系列主要讲解链表的经典题
注:划重点!!必考~
找到链表的中间结点
给定一个头结点为
head
的非空单链表,返回链表的中间结点 如果有两个中间结点,则返回第二个中间结点
1
和 100
之间一个个遍历,得到链表长度,在遍历链表长度的二分之一,就能得到中间结点
注意:链表长度有奇数和偶数两种情况 注:这里我们来实现高效思路
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* middleNode(struct ListNode* head){
//创建快慢指针,快指针走两步,而慢指针走一步(当快指针到尾时,慢指针在中间)
struct ListNode*slow,*fast;
slow=fast=head;
//节点为单数时,快指针走到尾节点(fast下一个节点为NULL则停止)
//节点为双数时,快指针走到尾节点的下一个节点NULL(fast为NULL则停止)
while(fast&&fast->next)
{
slow=slow->next;
fast=fast->next->next;
}
return slow;
}
每日k题无烦恼,点赞学习不得了~