从链表中删除给定节点。
链表: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 ;
}
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习