面試題三 C/C++面試祕笈 查找單鏈表的中間元素 --程序員面試題

/**

 *面試題 8

 *查找單鏈表的中間元素

 *這裏使用一個只掃描一遍的方法,假設mid指向當前已經掃面的當前的中間元素,cur指向當前鏈表已掃描的末節點,

 *那麼繼續掃面即移動curcur->next,這時只需判斷一下應不應該移動midmid->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交流


發佈了88 篇原創文章 · 獲贊 32 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章