Skip to content

Commit 9b95166

Browse files
add Doubly Linked List
1 parent 71cf677 commit 9b95166

File tree

4 files changed

+410
-0
lines changed

4 files changed

+410
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
struct Node
4+
{
5+
struct Node *prev;
6+
int data;
7+
struct Node *next;
8+
} *first = NULL;
9+
10+
void Create(int A[], int n)
11+
{
12+
struct Node *t, *last;
13+
int i;
14+
first = (struct Node *)malloc(sizeof(struct Node));
15+
first->data = A[0];
16+
first->prev = first->next = NULL;
17+
last = first;
18+
for (int i = 1; i < n; i++)
19+
{
20+
t = (struct Node *)malloc(sizeof(struct Node));
21+
t->data = A[i];
22+
t->next = last->next;
23+
t->prev = last;
24+
last->next = t;
25+
last = t;
26+
}
27+
}
28+
29+
void Display(struct Node *p)
30+
{
31+
while (p)
32+
{
33+
printf("%d ", p->data);
34+
p = p->next;
35+
}
36+
printf("\n");
37+
}
38+
39+
int Length(struct Node *p)
40+
{
41+
int len = 0;
42+
while (p)
43+
{
44+
len++;
45+
p = p->next;
46+
}
47+
return len;
48+
}
49+
50+
void Insert(struct Node *p, int index, int x)
51+
{
52+
struct Node *t;
53+
int i;
54+
55+
if (index < 0 || index > Length(p))
56+
return;
57+
if (index == 0)
58+
{
59+
t = (struct Node *)malloc(sizeof(struct Node));
60+
t->data = x;
61+
t->prev = NULL;
62+
t->next = first;
63+
first->prev = t;
64+
first = t;
65+
}
66+
else
67+
{
68+
for (int i = 0; i < index - 1; i++)
69+
p = p->next;
70+
71+
t = (struct Node *)malloc(sizeof(struct Node));
72+
t->data = x;
73+
t->next = p->next;
74+
t->prev = p;
75+
if (p->next) // if next node is present
76+
p->next->prev = t;
77+
p->next = t;
78+
}
79+
}
80+
81+
int Delete(struct Node *p, int index)
82+
{
83+
struct Node *q;
84+
int x = -1, i;
85+
if (index < 1 || index > Length(p))
86+
return -1;
87+
if (index == 1)
88+
{
89+
first = first->next;
90+
if (first)
91+
first->prev = NULL;
92+
x = p->data;
93+
free(p);
94+
}
95+
else
96+
{
97+
for (i = 0; i < index - 1; i++)
98+
p = p->next;
99+
p->prev->next = p->next;
100+
if (p->next)
101+
p->next->prev = p->prev;
102+
x = p->data;
103+
free(p);
104+
}
105+
return x;
106+
}
107+
int main()
108+
{
109+
int A[] = {10, 20, 30, 40, 50};
110+
Create(A, 5);
111+
printf("Deleted : %d\n", Delete(first, 4));
112+
Display(first);
113+
114+
return 0;
115+
}
116+
117+
// Deleted : 40
118+
// 10 20 30 50
119+
120+
// Time
121+
// Min : O(1)
122+
// Max : O(n)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
struct Node
4+
{
5+
struct Node *prev;
6+
int data;
7+
struct Node *next;
8+
} *first = NULL;
9+
10+
void Create(int A[], int n)
11+
{
12+
struct Node *t, *last;
13+
int i;
14+
first = (struct Node *)malloc(sizeof(struct Node));
15+
first->data = A[0];
16+
first->prev = first->next = NULL;
17+
last = first;
18+
for (int i = 1; i < n; i++)
19+
{
20+
t = (struct Node *)malloc(sizeof(struct Node));
21+
t->data = A[i];
22+
t->next = last->next;
23+
t->prev = last;
24+
last->next = t;
25+
last = t;
26+
}
27+
}
28+
29+
void Display(struct Node *p)
30+
{
31+
while (p)
32+
{
33+
printf("%d ", p->data);
34+
p = p->next;
35+
}
36+
printf("\n");
37+
}
38+
39+
int Length(struct Node *p)
40+
{
41+
int len = 0;
42+
while (p)
43+
{
44+
len++;
45+
p = p->next;
46+
}
47+
return len;
48+
}
49+
50+
int main()
51+
{
52+
int A[] = {10, 20, 30, 40, 50};
53+
Create(A, 5);
54+
printf("\nLength : %d\n", Length(first));
55+
Display(first);
56+
57+
return 0;
58+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
struct Node
4+
{
5+
struct Node *prev;
6+
int data;
7+
struct Node *next;
8+
} *first = NULL;
9+
10+
void Create(int A[], int n)
11+
{
12+
struct Node *t, *last;
13+
int i;
14+
first = (struct Node *)malloc(sizeof(struct Node));
15+
first->data = A[0];
16+
first->prev = first->next = NULL;
17+
last = first;
18+
for (int i = 1; i < n; i++)
19+
{
20+
t = (struct Node *)malloc(sizeof(struct Node));
21+
t->data = A[i];
22+
t->next = last->next;
23+
t->prev = last;
24+
last->next = t;
25+
last = t;
26+
}
27+
}
28+
29+
void Display(struct Node *p)
30+
{
31+
while (p)
32+
{
33+
printf("%d ", p->data);
34+
p = p->next;
35+
}
36+
printf("\n");
37+
}
38+
39+
int Length(struct Node *p)
40+
{
41+
int len = 0;
42+
while (p)
43+
{
44+
len++;
45+
p = p->next;
46+
}
47+
return len;
48+
}
49+
50+
void Insert(struct Node *p, int index, int x)
51+
{
52+
struct Node *t;
53+
int i;
54+
55+
if (index < 0 || index > Length(p))
56+
return;
57+
if (index == 0)
58+
{
59+
t = (struct Node *)malloc(sizeof(struct Node));
60+
t->data = x;
61+
t->prev = NULL;
62+
t->next = first;
63+
first->prev = t;
64+
first = t;
65+
}
66+
else
67+
{
68+
for (int i = 0; i < index - 1; i++)
69+
p = p->next;
70+
71+
t = (struct Node *)malloc(sizeof(struct Node));
72+
t->data = x;
73+
t->next = p->next;
74+
t->prev = p;
75+
if (p->next) // if next node is present
76+
p->next->prev = t;
77+
p->next = t;
78+
}
79+
}
80+
81+
int main()
82+
{
83+
int A[] = {10, 20, 30, 40, 50};
84+
Create(A, 5);
85+
Insert(first, 0, 25);
86+
Display(first);
87+
88+
return 0;
89+
}
90+
91+
// Output :
92+
// 25 10 20 30 40 50
93+
94+
// Time:
95+
// inserting at first = constant time
96+
// insert at an given index = O(n)

0 commit comments

Comments
 (0)