PDA

View Full Version : تفاوت دو کد



sa1378
پنج شنبه 02 مرداد 1393, 16:21 عصر
سلام
این کد ها عضو اخر linkedlist رو حذف میکنن
فرقشون چیه؟
اولی:
struct LinkedList *temp;
temp=new LinkedList;
for(; head!=NULL ; head=head->next )
{
temp=head;
}
delete head;
temp->next=NULL;
دومی :
for(; head->next->next!=NULL ; head=head->next );
delete head->next;
head->next=NULL;


یکیشون کار نمیکنه و یکی دیگه سالمه

rahnema1
پنج شنبه 02 مرداد 1393, 16:55 عصر
عبارتهای بالا را به صورت زیر بنویسید تا بتونید بهتر تحلیل کنید

while(head!=NULL)
{
temp=head;
head=head->next;
}
delete head;
temp->next=NULL;


while(head->next->next!=NULL)
{
head=head->next;
}
delete head->next;
head->next=NULL;


حالا روشن شد در اولی در آخرین دور حلقه temp برابر با آخرین خانه لیست میشه و در نتیجه head هم برابر با null میشه وقتی از حلقه بیرون می آییم ما head که برابر با null هست را حذف می کنیم و سپس عنصر بعد از temp را null می کنیم

اما در دومی در آخرین دور حلقه ما وقتی متوقف می شیم که head در دوخانه قبل از خانه آخر باشه سپس head را برابر خانه یکی مانده به آخر قرار می دهیم
در بیرون از حلقه ما خانه بعد از head یعنی خانه آخر را حذف کرده و به جاش null میذاریم