Re: [問題] linked list 刪除小問題一問

看板C_and_CPP作者 (瓶子)時間14年前 (2010/01/03 21:26), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
你在做del_node(listnode *start)的時候 假設你的list為 A(start) -> B -> C -> D 你把start傳入,卻使用call by value. 假設你想刪除A 你在del_node function裡面把start指到B了 但實際上你main function裡面卻還是指著A的位址! (解釋不是很好,抱歉) 因此看你想選在del_node function 裡面把start 回傳出來 或者 使用call by reference方式皆可。 void del_node(listnode **start) // { int del= 0; printf("請輸入欲刪除的資料 >"); scanf("%d", &del); listnode *delnode, *temp; //delnode:要刪的節點 ;temp:delnode的前一個節點 delnode= *start; temp= NULL; while( delnode->data!=del ) { temp= delnode; delnode= delnode->link; if(delnode==NULL) {printf("查無此資料\n"); return;}; } if(delnode==*start) { *start= (*start)->link; } else { temp->link= delnode->link; } free(delnode); } 然後main function case 2: { del_node(&start); 因該就沒問題了! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.227.195.174

01/03 22:44, , 1F
恩 解決了 感謝
01/03 22:44, 1F
文章代碼(AID): #1BG9hfOG (C_and_CPP)
文章代碼(AID): #1BG9hfOG (C_and_CPP)