常规解法
力扣链接: https://leetcode-cn.com/problems/middle-of-the-linked-list/
求链表长度法
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
int GetLengthOfList(struct ListNode* head)//获取长度
{
int len = 0;
while (head != NULL)
{
len++;
head = head->next;
}
return len;
}
struct ListNode* middleNode(struct ListNode* head)
{
int len = GetLengthOfList(head);
struct ListNode* p = head;
for (int i = 0; i<len / 2; i++)
{
p = p->next;
}
return p;
}
快慢指针法
struct ListNode* middleNode(struct ListNode* head)
{
struct ListNode* fast,* slow;
fast = slow = head;
while(fast && fast->next != NULL)
{
fast = fast->next->next;
slow = slow->next;
}
return slow;
}