G

Untitled

public
Guest Apr 27, 2025 Never 35
Clone
C template.c 105 lines (92 loc) | 2.1 KB
1
2
#include <stdio.h>
3
#include <stdlib.h>
4
typedef struct _node {
5
int x;
6
struct _node *next;
7
struct _node *prev;
8
} Node;
9
10
void Insert(Node* tar, int val){
11
Node* tmp = (Node *) malloc(sizeof(Node));
12
tmp->x = val;
13
tmp->next = tar->next;
14
tar->next = tmp;
15
}
16
17
void Remove(Node* head, Node* tar){
18
Node* tmp = head;
19
while(tmp->next!=tar){
20
tmp = tmp->next;
21
}
22
tmp->next = tmp->next->next;//tmp->next = tar->next;
23
free(tar);
24
}
25
26
void addElement(Node* head, int val){
27
Node* tmp = head;
28
while(tmp->next){ //while(tmp->next!=NULL)
29
tmp = tmp->next;
30
}
31
tmp->next = (Node *) malloc(sizeof(Node));
32
tmp->next->x = val;
33
tmp->next->next = NULL;
34
tmp->next->prev = tmp;
35
}
36
37
void removeLast(Node* head){
38
if(!head) return;
39
Node* tmp = head;
40
while(tmp->next){
41
tmp = tmp->next;
42
}
43
tmp->prev->next = NULL;
44
free(tmp);
45
}
46
47
void printList(Node* head){
48
49
while (head!=NULL) {
50
printf("%d ", head->x);
51
head = head->next;
52
}
53
printf("\n");
54
}
55
56
void freeList(Node* head){
57
58
Node* np;
59
while (head!=NULL) {
60
np = head;
61
head = head->next;
62
printf("Freeing %d\n",np->x);
63
free(np);
64
}
65
}
66
67
int main(void)
68
{
69
Node *head;
70
Node *np, *nq;
71
int i;
72
73
head = (Node *) malloc(sizeof(Node));
74
head->x = 0;
75
head->next = (Node *) malloc(sizeof(Node));
76
head->prev = NULL;
77
78
i = 1;
79
nq = head;
80
while (i < 10) {
81
np = (Node *) malloc(sizeof(Node));
82
np->x = i;
83
np->next = NULL;
84
np->prev = nq;
85
nq->next = np;
86
nq = nq->next;
87
i++;
88
}
89
90
printList(head);
91
// Insert(head.next->next->next, 777);
92
// printList(head);
93
// Remove(&head, head.next->next->next->next->next->next);
94
// printList(head);
95
addElement(&head,26);
96
printList(head);
97
removeLast(&head);
98
printList(head);
99
// addElement(&head,22);
100
// printList(head);
101
// addElement(&head,23);
102
// printList(head);
103
freeList(head);
104
105
return 0;
106
}