7-9 单向链表2 分数 25 作者 wangxiu 单位 福州大学 编程实现:输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算: 输入一个正整数 n(0<n<=9)和一组(n个)整数,建立一个单向链表,再输入一个整数 x,将链表中最后一个与x相等的整数删除。 输入输出示例:括号内为说明 输入样例: 3 (repeat=3) 5 (数据的个数n=5) 1 2 4 3 7 (5个整数) 4 (待删除整数x=4) 5 (数据的个数n=5) 2 1 5 7 5 (5个整数) 5 (待删除整数x=5) 3 (数据的个数n=3) 1 2 4 (3个整数) 100 (待删除整数x=100) 输出样例: size=4:1 2 3 7 size=4:2 1 5 7 size=3:1 2 4
时间: 2024-03-21 09:43:34 浏览: 55
```python
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int val;
struct node* next;
} Node;
typedef struct list {
int len;
Node* head;
} List;
// 初始化链表
void initList(List* list) {
list->len = 0;
list->head = NULL;
}
// 在链表末尾插入节点
void insertNode(List* list, int val) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->val = val;
newNode->next = NULL;
if (list->head == NULL) { // 如果链表为空,新节点即为头节点
list->head = newNode;
} else { // 否则,将新节点插入到链表末尾
Node* node = list->head;
while (node->next != NULL) {
node = node->next;
}
node->next = newNode;
}
list->len++; // 更新链表长度
}
// 删除链表中最后一个与给定值相等的节点
void deleteNode(List* list, int val) {
Node* pre = NULL;
Node* node = list->head;
while (node != NULL) {
if (node->val == val) { // 如果当前节点的值与给定值相等
if (pre == NULL) { // 如果当前节点为头节点
list->head = node->next;
} else {
pre->next = node->next;
}
free(node);
list->len--; // 更新链表长度
break;
}
pre = node;
node = node->next;
}
}
int main() {
int repeat, n, x;
scanf("%d", &repeat);
while (repeat--) {
List list;
initList(&list);
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int val;
scanf("%d", &val);
insertNode(&list, val);
}
scanf("%d", &x);
deleteNode(&list, x);
printf("size=%d:", list.len);
Node* node = list.head;
while (node != NULL) {
printf("%d ", node->val);
node = node->next;
}
printf("\n");
}
return 0;
}
```
阅读全文