题目描述:给你单链表的头结点 head
,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
分析:通过用双指针,一个快指针,一个慢指针,快指针走两步,慢指针走一步若链表的长度为奇数时,当快指针为空时,慢指针正好为链表的中间节点 ,若链表的长度为偶数时,当快指针为空时,慢指针正好为链表的中间的第二个节点。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* middleNode(struct ListNode* head){
//通过用双指针,一个快指针,一个慢指针,快指针走两步,慢指针走一步
//若链表的长度为奇数时,当快指针为空时,慢指针正好为链表的中间节点
//若链表的长度为偶数时,当快指针为空时,慢指针正好为链表的中间的第二个节点
struct ListNode* fast = head,
*slow = head;
while(fast && fast->next){
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
欢迎各位佬们提出意见,谢谢!!1