思路:
- 设置一个快指针,一个慢指针;
- 快指针一次走两步,慢指针一次走一步;
- 当快指针到链表尾部时,慢指针恰好到达链表中部;
代码如下:
typedef struct Node
{
int data;
struct Node* next;
} Node;
Node* findMiddle (Node* head)
{
Node* fast;
Node* slow;
Node* p;
if (head == NULL)
return NULL;
fast = slow = head;
while ((p = fast->next != NULL) && (p->next != NULL))
{
slow = slow->next;
fast = p->next;
}
return slow;
}