Re: [問題] linked list 刪除小問題一問
你在做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
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):