#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
typedef struct node {
int data;
struct node *next;
} NODE;
NODE *Head = NULL;
NODE *makeANode(int data)
{
NODE *p = (NODE *)malloc(sizeof(NODE));
p->data = data;
p->next = NULL;
return p;
}
int insertNodeHead(int data, NODE *head)
{
if (head == NULL) {
head = (NODE *) malloc(sizeof(NODE));
if (head == NULL) {
printf("malloc fail\n");
return -1;
}
head->data = data;
return 0;
}
NODE *tmp = makeANode(data);
tmp->next = head->next;
head->next = tmp;
return 0;
}
int insertNodeTail(int data, NODE *head)
{
if (head == NULL) {
head = (NODE *) malloc(sizeof(NODE));
head->data = data;
return 0;
}
NODE *tmp = makeANode(data);
NODE *p = head->next;
while(p->next != NULL) {
p = p->next;
}
p->next = tmp;
return 0;
}
int insertNodeSomeAfter(int value, int data, NODE* head)
{
if (head == NULL) {
head = (NODE *) malloc(sizeof(NODE));
head->data = data;
return 0;
}
NODE *tmp = makeANode(data);
NODE *p = head->next;
for (p; p->next != NULL; p = p->next) {
if (p->data == value) {
tmp->next = p->next;
p->next = tmp;
break;
}
}
return 0;
}
int DeleteNodeOne(int data, NODE *head)
{
if (head == NULL) {
return -1;
}
if (head->data == data) {
NODE *p = head;
head = head->next;
free(p);
return 0;
}
NODE *tmp = head->next;
for (tmp; tmp->next != NULL; tmp = tmp->next) {
if (tmp->next->data == data) {
NODE *p = tmp->next;
tmp->next = p->next;
p->next = NULL;
free(p);
return 0;
}
}
return 0;
}
int main()
{
int num = 0;
scanf("%d", &num);
int i = num / 2;
int hd = 0;
NODE *p = Head;
scanf("%d", &hd);
insertNodeHead(hd, Head);
if (p ==NULL)
{
printf("head is null\n");
}
for (int m = 0; m < num - 1; m++) {
int value = 0, data = 0;
scanf("%d%d", &data, &value);
insertNodeSomeAfter(value, data, Head);
}
int del = 0;
scanf("%d", &del);
for (p; p->next != NULL; p = p->next) {
printf("%d ", p->data);
}
DeleteNodeOne(del, Head);
if (p ==NULL)
{
printf("head is null\n");
}
for (p; p->next != NULL; p = p->next) {
printf("%d ", p->data);
}
return 0;
}