用c寫一個 洗掉單鏈表中值為key的第一個結點:查找值為key的結點是否存在,若存在,則洗掉;否則回傳NULL。
uj5u.com熱心網友回復:
/*
==========================
功能:洗掉指定節點
(此例中是洗掉指定學號的節點)
回傳:指向鏈表表頭的指標
==========================
*/
struct student *Del (struct student *head, int num)
{
struct student *p1; //p1保存當前需要檢查的節點的地址
struct student *p2; //p2保存當前檢查過的節點的地址
if (head == NULL) //是空鏈表(結合圖3理解)
{
printf ("\nList is null!\n");
return head;
}
//定位要洗掉的節點
p1 = head;
while (p1->num != num && p1->next != NULL) //p1指向的節點不是所要查找的,并且它不是最后一個節點,就繼續往下找
{
p2 = p1; //保存當前節點的地址
p1 = p1->next; //后移一個節點
}
if(p1->num==num) //找到了。(結合圖4、5理解)
{
if (p1 == head) //如果要洗掉的節點是第一個節點
{
head = p1->next; //頭指標指向第一個節點的后一個節點,也就是第二個節點。這樣第一個節點就不在鏈表中,即洗掉
}
else //如果是其它節點,則讓原來指向當前節點的指標,指向它的下一個節點,完成洗掉
{
p2->next = p1->next;
}
free (p1); //釋放當前節點
p1 = NULL;
printf ("\ndelete %ld success!\n", num);
n -= 1; //節點總數減1個
}
else //沒有找到
{
printf ("\n%ld not been found!\n", num);
}
return head;
}
在CSDN里搜一搜么,一大堆,關鍵字:C語言 鏈表。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/267529.html
標籤:新手樂園
上一篇:新人求助
下一篇:求解一個16進制高難度校驗演算法
