解析:在处理链表问题时,”快行指针“(runner,或称第二个指针)是一种很常见的技巧。快行指针指的是同时用两个指针来迭代访问链表,只不过其中一个比另一个超前一些。
设立两个指针,比如*p和*q。p每次移动两步,即 p = p->next->next,q每次移动一步,即 q = q->next。这样,当p到达最后一个节点时,q就是中间节点。
算法如下:
1 void serchmid(node *head, node *mid) 2 { 3 node *temp = head; 4 while(head->next->next != NULL) 5 { 6 head = head->next->next; 7 temp = temp->next; 8 mid = temp; 9 } 10 }