Delete the specified node in the linked list with dummy header

时间:2024-04-27 12:30:45

分数 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程序如下:

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;  
    }  
  
}