题解 | #【模板】链表#
【模板】链表
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; }