题解 | #从单向链表中删除指定值的节点#
从单向链表中删除指定值的节点
https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f
#include"stdio.h" #include"stdlib.h" typedef struct node{ int val; struct node* next; }Lnode; int main() { int n ,h, a, b, del; scanf("%d%d", &n, &h); Lnode *p, *q; Lnode* head = (Lnode*)malloc(sizeof(Lnode)); head->val = h; head->next = NULL; while(n-- > 1) { scanf("%d%d", &a, &b); Lnode* temp = (Lnode*)malloc(sizeof(Lnode)); temp->val = a; temp->next = NULL; p = head; while(p->val != b) p = p->next; temp->next = p->next; p->next = temp; } // q = head; // while(q != NULL) // { // printf("%d ",q->val); // q = q->next; // } scanf("%d", &del); while(head->val == del) { head = head->next; } for(p = head; p->next!= NULL; p = p->next) { if(p->next->val == del) { q = p->next; p->next = p->next->next; free(q); } } while(head != NULL) { printf("%d ",head->val); head = head->next; } return 0; }
感觉用下面的
while(head->val == del)
{
head = head->next;
}
来删除前面重复的结点的方法还是比较好的
还有上面的for循环中的 p->next!= NULL
是为了配合后面的if(p->next->val == del)