blob: fe2c967b85d8c0d32123d84bad1d3f0cfa3a0901 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
#include <iostream>
struct list
{
int inf;
list *next;
list *prev;
};
void push(list *&h, list *&t, int x)
{
list *r = new list;
r->inf = x;
r->next = NULL;
if (!h && !t)
{
r->prev = NULL;
h = r;
}
else
{
t->next = r;
r->prev = t;
}
t = r;
}
void print(list *h, list *t)
{
list *p = h;
while (p)
{
std::cout << p->inf << " ";
p = p->next;
}
}
list *find(list *h, list *t, int x)
{
list *p = h;
while (p)
{
if (p->inf == x) break;
p = p->next;
}
return p;
}
void insert_after(list *&h, list *&t, list *r, int y)
{
list *p = new list;
p->inf = y;
if (r == t)
{
p->next = NULL;
p->prev = r;
r->next = p;
t = p;
}
else {
r->next->prev = p;
p->next = r->next;
p->prev = r;
r->next = p;
}
}
void del_node(list *&h, list *&t, list *r)
{
if (r == h && r == t)
h = t = NULL;
else if (r == h)
{
h = h->next;
h->prev = NULL;
}
else if (r == t)
{
t = t->prev;
t->next = NULL;
}
else
{
r->next->prev = r->prev;
r->prev->next = r->next;
}
delete r;
}
void del_list(list *&h, list *&t)
{
while (h)
{
list *p = h;
h = h->next;
h->prev = NULL;
delete p;
}
}
|