#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义链表节点结构体
struct Node {
int data;
struct Node* next;
};
typedef struct Node Node;
// 插入节点
void insert(Node** head, int x, int y) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = y;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
return;
}
Node* current = *head;
Node* prev = NULL;
while (current != NULL && current->data != x) {
prev = current;
current = current->next;
}
if (current == NULL) {
prev->next = newNode;
} else {
if (prev != NULL) {
prev->next = newNode;
} else {
newNode->next = *head;
*head = newNode;
}
newNode->next = current;
}
}
// 删除节点
void delete(Node** head, int x) {
Node* current = *head;
Node* prev = NULL;
while (current != NULL && current->data != x) {
prev = current;
current = current->next;
}
if (current != NULL) {
if (prev != NULL) {
prev->next = current->next;
} else {
*head = current->next;
}
free(current);
}
}
// 输出链表
void printList(Node* head) {
if (head == NULL) {
printf("NULL\n");
return;
}
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
Node* head = NULL;
int n;
scanf("%d", &n);
while (n--) {
char operation[10];
int x, y;
scanf("%s", operation);
if (strcmp(operation, "insert") == 0) {
scanf("%d %d", &x, &y);
insert(&head, x, y);
} else if (strcmp(operation, "delete") == 0) {
scanf("%d", &x);
delete(&head, x);
}
}
printList(head);
return 0;
}