题解 | #从单向链表中删除指定值的节点#
从单向链表中删除指定值的节点
https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f
#include <stdio.h> #include <stdlib.h> typedef struct Node { int v; struct Node* next; } Node_t; int insert_node_tail(Node_t* node, int value) { Node_t* s = malloc(sizeof(Node_t)); s->v = value; s->next = node->next; node->next = s; return 0; } Node_t* find(Node_t* head, int value) { Node_t* node = head->next; while (node) { if (node->v == value) { break; } node = node->next; } return node; } int delete (Node_t* head, int value) { Node_t* p = head->next; Node_t* q; while (p) { if (p->v == value) { break; } p = p->next; } if (p->next) { q = p->next; p->next = q->next; p->v = q->v; free(q); } else { free(p); head->next = NULL; } return 0; } void print_list(Node_t* head) { Node_t* node = head->next; while (node) { printf("%d ", node->v); node = node->next; } } int main() { int node_num; scanf("%d", &node_num); //printf("node_num:%d\n",node_num); int value = 0; scanf("%d", &value); //printf("value:%d\n",value); Node_t head; Node_t* p = malloc(sizeof(Node_t)); p->next = NULL; p->v = value; head.next = p; node_num--; int i = 0; for (i = 0; i < node_num; i++) { int new_value = 0, exist_value = 0; scanf("%d", &new_value); scanf("%d", &exist_value); //printf("%d->%d\n", exist_value, new_value); Node_t* p = NULL; p = find(&head, exist_value); insert_node_tail(p, new_value); } int del_v; scanf("%d", &del_v); //printf("del_v:%d\n",del_v); delete (&head, del_v); print_list(&head); return 0; }
考察基本的队列操作编写,C++的好写,直接调库,C的要手写