题解 | #【模板】链表#
【模板】链表
https://www.nowcoder.com/practice/97dc1ac2311046618fd19960041e3c6f
链表基础题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
struct ListNode {
int data;
struct ListNode* next;
};
struct ListNode* insert(struct ListNode* listnode, int x, int y) {
struct ListNode* pre = listnode;
struct ListNode* ln = listnode->next;
while (ln != NULL) {
if (ln->data != x) {
pre = ln;
ln = ln->next;
} else break;
}
struct ListNode* temp = (struct ListNode*)malloc(sizeof(struct ListNode));
temp->data = y;
pre->next = temp;
temp->next = ln;
return listnode;
}
struct ListNode* delete (struct ListNode* listnode, int x) {
struct ListNode* pre = listnode;
struct ListNode* ln = listnode->next;
while (ln != NULL) {
if (ln->data != x) {
pre = ln;
ln = ln->next;
} else break;
}
if (ln == NULL) return listnode;
else {
pre->next = ln->next;
struct ListNode* temp = ln;
free(temp);
}
return listnode;
}
int main() {
int n;
//初始化
struct ListNode* listnode = (struct ListNode*)malloc(sizeof(struct ListNode));
//有头节点方便操作
listnode->next = NULL;
scanf("%d", &n);
char opt[8];
for (int i = 0; i < n; i++) {
scanf("%s", opt);
//insert
if (!strcmp(opt, "insert")) {
int x, y;
scanf("%d %d", &x, &y);
listnode = insert(listnode,x,y);
//delete
} else {
int x;
scanf("%d",&x);
listnode = delete(listnode,x);
}
}
//输出
if(listnode->next == NULL) printf("NULL");
else{
while(listnode->next != NULL){
printf("%d ",listnode->next->data);
listnode = listnode->next;
}
}
return 0;
}

查看17道真题和解析