/**
*面試題 8
*查找單鏈表的中間元素
*這裏使用一個只掃描一遍的方法,假設mid指向當前已經掃面的當前的中間元素,cur指向當前鏈表已掃描的末節點,
*那麼繼續掃面即移動cur到cur->next,這時只需判斷一下應不應該移動mid到mid->next就行了。
*所以一遍掃面就能找到中間位置
*/
node * search_middle(node * head)
{
int i=0,j=0;
node *current=NULL,*middle=NULL;
current = middle = head->next;//開始都在第一個節點
while (current !=NULL) {
if(( i /2) > j){//如果當前的位置除2大於j的位置,那麼才移動mid到下一個節點
j++;
middle = middle->next;//指向下一個節點
}
i++;//每次i都自加一次
current = current->next;//下一個節點
}
return middle;
}
//主函數
int main(int argc,const char * argv[]) {
node *head =create();//創建單鏈表node *current;
cout<<"search middle the node:"<<endl;
current = search_middle(head);
cout<<current->data<<endl;
return 0;
}
如果有任何問題,歡迎下方留言談論,或者加入QQ羣83459374交流