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