Delete the specified node in the linked list with dummy header

分数 20

作者 伍建全

单位 重庆科技大学

Please create a function with the prototype void deleteNode(List L, int key) . This function should delete the first node from the linked list L with dummy header, where the data field is equal to key . If there are no nodes in the list where the data field is equal to key , the function should do nothing. If there are multiple nodes in the list where the data field is equal to key, only the first one should be deleted.

Structure description:

The node structure is shown below:

复制代码
typedef struct ListNode {
    int data;
    struct ListNode *next;
} node;

typedef node* position;
typedef position List;

Function definition:

复制代码
void deleteNode(List L, int key);

The parameter L is a pointer to the dummy header. This function should delete the first node from the linked list L with dummy header, where the data field is equal to key . If there are no nodes in the list where the data field is equal to key , the function should do nothing. If there are multiple nodes in the list where the data field is equal to key, only the first one should be deleted.

Test program example:

复制代码
#include <stdio.h>
#include <stdlib.h>

typedef struct ListNode {
    int data;
    struct ListNode *next;
}node;

typedef node* position;
typedef position List;

void deleteNode(List L, int key);

// The questioner has implemented the createList function.
// This function reads a series of positive integers separated by spaces
// and inserts them into a linked list using the head insertion method.
// Entering -1 indicates the end of input.
// creatgeList函数由题目提供,不需要在本题的答案中实现
List createList();
//Function show outputs the data field of each node in the linked list L.
// show函数由题目提供,不需要在本题的答案中实现
void show(List L);
// destroy函数由题目提供,不需要在本题的答案中实现
void destroy(List L);

int main(void)
{
    List L = createList();
    show(L);
    int key;
    scanf("%d", &key);
    deleteNode(L, key);
    show(L);
    destroy(L);
    return 0;
}

Input Specification:

There are two lines of input. The first line is a series of positive integers, and entering -1 indicates the end of the input. The second line contains one integer, which represents the number that needs to be deleted from the linked list.(输入有两行。第1行是一系列正整数,输入-1表示输入结束。第2行有1个整数,表示需要从链表中删除的数。)

Output Specification:

There are two lines of output. The first line is the linked list before the element is deleted; the second line is the linked list after the deletion.

Sample Input :

复制代码
10 20 30 40 50 -1
40

Sample Output :

复制代码
50 40 30 20 10 
50 30 20 10 

参考答案

编辑

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C程序如下:

cs 复制代码
void deleteNode(List L, int key){  
    // 定义两个指向节点的指针p和q  
    node* p;  
    node* q;  
  
    // 将p指针指向链表的头节点  
    p = L;  
  
    // 将q指针指向头节点的下一个节点,即链表的第一个数据节点  
    q = p->next;  
  
    // 遍历链表,直到到达链表的末尾  
    while(p->next != NULL){  
        // 检查当前q指针所指向的节点的数据域是否等于key  
        if(q->data == key){  
            // 如果找到值为key的节点,则修改p指针的next指向q的下一个节点  
            // 这样相当于跳过了q指向的节点,实现了删除操作  
            p->next = q->next;  
  
            // 释放q指向的节点的内存  
            free(q);  
  
            // 删除成功,退出函数  
            return;  
        }  
  
        // 将p指针移动到q指向的节点,以便下一次迭代时检查q的下一个节点  
        p = q;  
  
        // 将q指针移动到它的下一个节点,继续遍历链表  
        q = q->next;  
    }  
  
}
相关推荐
HelloDam7 分钟前
基于元素小组的归并排序算法
后端·算法·排序算法
HelloDam7 分钟前
基于连贯性算法的多边形扫描线生成(适用于凸多边形和凹多边形)【原理+java实现】
算法
逸狼32 分钟前
【Java 优选算法】二分算法(下)
数据结构
uhakadotcom1 小时前
Apache Airflow入门指南:数据管道的强大工具
算法·面试·github
跳跳糖炒酸奶2 小时前
第四章、Isaacsim在GUI中构建机器人(2):组装一个简单的机器人
人工智能·python·算法·ubuntu·机器人
绵绵细雨中的乡音2 小时前
动态规划-第六篇
算法·动态规划
程序员黄同学2 小时前
动态规划,如何应用动态规划解决实际问题?
算法·动态规划
march_birds2 小时前
FreeRTOS 与 RT-Thread 事件组对比分析
c语言·单片机·算法·系统架构
小麦嵌入式3 小时前
Linux驱动开发实战(十一):GPIO子系统深度解析与RGB LED驱动实践
linux·c语言·驱动开发·stm32·嵌入式硬件·物联网·ubuntu
斯汤雷3 小时前
Matlab绘图案例,设置图片大小,坐标轴比例为黄金比
数据库·人工智能·算法·matlab·信息可视化