查找链表的中间元素,最简便的方法之一,就是先遍历一遍链表,得到链表长度,再根据长度遍历得到中间的元素。我这里用的是快慢指针去查找,只需要遍历一次即可,快指针每次走两步,慢指针每次走一步,当快指针走完了,慢指针所指位置即中间元素的位置,具体实现如下
C代码实现
struct ListNode {
int val;
struct ListNode *next;
};
/*
** 若链表元素为奇数个,则返回中间的元素,若链表元素为偶数个,则返回中间 元素偏左的一个
*/
struct ListNode* link_list_find_mid_ele(struct ListNode* head)
{
struct ListNode* fast, *slow;
fast = head;
slow = head;
if(!head)
return NULL;
while(fast && fast->next)
{
fast = fast->next->next;
slow = slow->next;
}
return slow;
}