题解 | #从单向链表中删除指定值的节点#
从单向链表中删除指定值的节点
https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f
#include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct List { struct List* before; int val; struct List* next; } list; list* seek(int i, list* L) { list* p = L; while (i != p->val) { p = p->next; } return p; } int main() { int n = 0; scanf("%d", &n); int arr[2000]; memset(arr, 0, sizeof(arr)); int i = 0; for (i = 0; i < 2 * n; i++) { scanf("%d", &arr[i]); } list* L = malloc(sizeof(list)); L->val = arr[0]; L->next = NULL; L->before = NULL; for (i = 1; i <= 2 * n - 3; i += 2) { list* q = seek(arr[i + 1], L); list* p = malloc(sizeof(list)); p->val = arr[i]; p->next = q->next; p->before = q; q->next = p; if (p->next != NULL) p->next->before = p; } list* p = seek(arr[2 * n - 1], L); if (p->next != NULL) p->before->next = p->next; free(p); p = L; while (p != NULL) { printf("%d ", p->val); p = p->next; } return 0; }