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;  
    }  
  
}
相关推荐
那个村的李富贵1 天前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
power 雀儿1 天前
Scaled Dot-Product Attention 分数计算 C++
算法
Yvonne爱编码1 天前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
熬夜有啥好1 天前
数据结构——哈希表
数据结构·散列表
琹箐1 天前
最大堆和最小堆 实现思路
java·开发语言·算法
renhongxia11 天前
如何基于知识图谱进行故障原因、事故原因推理,需要用到哪些算法
人工智能·深度学习·算法·机器学习·自然语言处理·transformer·知识图谱
坚持就完事了1 天前
数据结构之树(Java实现)
java·算法
算法备案代理1 天前
大模型备案与算法备案,企业该如何选择?
人工智能·算法·大模型·算法备案
赛姐在努力.1 天前
【拓扑排序】-- 算法原理讲解,及实现拓扑排序,附赠热门例题
java·算法·图论
我能坚持多久1 天前
【初阶数据结构01】——顺序表专题
数据结构