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;  
    }  
  
}
相关推荐
晚霞的不甘3 分钟前
Flutter for OpenHarmony 可视化教学:A* 寻路算法的交互式演示
人工智能·算法·flutter·架构·开源·音视频
望舒5136 分钟前
代码随想录day25,回溯算法part4
java·数据结构·算法·leetcode
独好紫罗兰17 分钟前
对python的再认识-基于数据结构进行-a006-元组-拓展
开发语言·数据结构·python
C++ 老炮儿的技术栈22 分钟前
Qt 编写 TcpClient 程序 详细步骤
c语言·开发语言·数据库·c++·qt·算法
KYGALYX26 分钟前
逻辑回归详解
算法·机器学习·逻辑回归
铉铉这波能秀35 分钟前
LeetCode Hot100数据结构背景知识之集合(Set)Python2026新版
数据结构·python·算法·leetcode·哈希算法
踢足球092938 分钟前
寒假打卡:2026-2-8
数据结构·算法
IT猿手1 小时前
基于强化学习的多算子差分进化路径规划算法QSMODE的机器人路径规划问题研究,提供MATLAB代码
算法·matlab·机器人
千逐-沐风1 小时前
SMU-ACM2026冬训周报3rd
算法
wangjialelele1 小时前
Linux下的IO操作以及ext系列文件系统
linux·运维·服务器·c语言·c++·个人开发