#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)