更新時間:2022-09-01 10:26:32 來源:動力節點 瀏覽1074次
從鏈表中刪除給定節點。
鏈表:102030無效的
輸入
20
輸出
1030無效的
輸入
30
輸出
1020無效的
1.如果頭節點有給定的key,
使頭節點指向第二個節點并釋放其內存。
2. 否則,
從當前節點,檢查下一個節點是否有給定的key
如果是,則使 current->next = current->next->next 并釋放內存。
否則,將當前節點更新為下一個節點并執行上述過程(從步驟 2 開始)直到最后一個節點。
void deleteNode ( struct node ** head, int key)
{
//temp用于釋放內存
struct node * temp;
//在頭節點上找到的鍵。
//移動到頭節點到下一個并釋放頭。
if ( * head -> data == key)
{
溫度= *頭; //備份head以釋放內存
* head = ( * head) -> next;
免費(臨時);
}
}
視覺表現
讓我們刪除數據 10(頭節點)。
對于其他節點(Non-Head)
void deleteNode ( struct node ** head, int key)
{
//temp用于釋放內存
struct node * temp;
//在頭節點上找到的鍵。
//移動到頭節點到下一個并釋放頭。
如果((*頭)->數據==鍵)
{
溫度= *頭; //備份釋放內存
* head = ( * head) -> next;
免費(臨時);
}
別的
{
結構節點*當前 = *頭;
而(當前->下一個!= NULL)
{
//如果是,我們需要刪除當前->下一個節點
if (current -> next -> data == key)
{
臨時=當前->下一個;
//節點將與鏈表斷開連接。
當前->下一個=當前->下一個->下一個;
免費(臨時);
休息;
}
//否則,移動當前節點并繼續
else
current = current -> next;
}
}
}
視覺表現
讓我們刪除數據 20
例子
#include<stdio.h>
#include<stdlib.h>
結構節點
{
整數數據;
結構節點*下一個;
};
void addLast ( struct node ** head, int val)
{
//創建一個新節點
struct node * newNode = malloc( sizeof ( struct node));
新節點->數據= val;
新節點->下一個 = NULL ;
//如果head為NULL,它是一個空列表
if ( * head == NULL )
* head = newNode;
//否則,找到最后一個節點,添加newNode
else
{
結構節點* lastNode = *頭;
//最后一個節點的下一個地址將為NULL。
while (lastNode -> next != NULL )
{
最后一個節點=最后一個節點->下一個;
}
//在鏈表末尾添加newNode
lastNode -> next = newNode;
}
}
void deleteNode ( struct node ** head, int key)
{
//temp用于釋放內存
struct node * temp;
//在頭節點上找到的鍵。
//移動到頭節點到下一個并釋放頭。
如果((*頭)->數據==鍵)
{
溫度= *頭; //備份釋放內存
* head = ( * head) -> next;
免費(臨時);
}
別的
{
結構節點*當前 = *頭;
而(當前->下一個!= NULL)
{
//如果是,我們需要刪除當前->下一個節點
if (current -> next -> data == key)
{
臨時=當前->下一個;
//節點將與鏈表斷開連接。
當前->下一個=當前->下一個->下一個;
免費(臨時);
休息;
}
//否則,移動當前節點并繼續
else
current = current -> next;
}
}
}
無效 打印列表(結構節點*頭)
{
結構節點*溫度=頭;
//迭代整個鏈表并打印數據
while (temp != NULL )
{
printf( "%d ->" , temp -> data);
溫度=溫度->下一個;
}
printf( "NULL \n " );
}
主函數 ()
{
結構節點*頭= NULL ;
addLast( &頭, 10 );
addLast( &頭, 20 );
addLast( &頭, 30 );
printf( "鏈表元素:\n " );
打印列表(頭);
//刪除第一個節點
deleteNode( & head, 10 );
printf( "刪除10.新鏈表:\n " );
打印列表(頭);
//刪除最后一個節點
deleteNode( & head, 30 );
printf( "刪除 30. 新鏈表:\n " );
打印列表(頭);
//刪除 20
deleteNode( & head, 20 );
printf( "已刪除 20. 新鏈表:\n " );
打印列表(頭);
返回 0 ;
}
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習