题解 | #从单向链表中删除指定值的节点#
从单向链表中删除指定值的节点
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)