#include <stdio.h>
#include <stdlib.h>
typedef struct n {
int data;
struct n* next;
struct n* pre;
}* node;
node create();
void print(node head);
node insertNode(node head, int i);
node deleteNode(node head, int i);
int main()
{
node head = create();
int x;
scanf("%d", &x);
head = insertNode(head, x);
print(head);
int y;
scanf("%d", &y);
head = deleteNode(head,y);
print(head);
return 0;
}
node create() {
node cur, dat, head;
struct n pnode;
head = &pnode;
cur = &pnode;
int x;
while(scanf("%d", &x) != EOF) {
dat = (node)malloc(sizeof(struct n));
dat->data = x;
dat->pre = cur;
cur->next = dat;
cur = dat;
}
cur->next = NULL;
head = head->next;
head->pre = NULL;
return head;
}
void print(node head) {
node p = head;
while(p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
node insertNode(node head, int i) {
node temp = (node)malloc(sizeof(struct n));
temp->data = i;
node p = head;
if(i <= p->data) {
temp->next = p;
p->pre = temp;
temp->pre = NULL;
return temp;
}
while(p->next && p->data < i) {
p = p->next;
}
if(p->data >= i) {
temp->next = p;
temp->pre = p->pre;
p->pre->next = temp;
p->pre = temp;
} else {
p->next = temp;
temp->pre = p;
temp->next = NULL;
}
return head;
}
node deleteNode(node head, int i) {
node p = head;
while(head->data == i) {
node n = head;
head = head->next;
head->pre = NULL;
free(n);
n->next = NULL;
n->pre = NULL;
}
if(head->data > i)
return head;
while(p->next && p->data<i) {
p = p->next;
}
if(p->next && p->data == i) {
node q = p;
while(p->next && p->data == i) {
p = p->next;
}
q->pre->next = p;
p->pre = q->pre;
} else if(!p->next && p->data==i) {
p->pre->next = NULL;
free(p);
p->pre = NULL;
} else {
printf("delete error!\n");
}
return head;
}