-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdellinklist.c
143 lines (133 loc) · 3.35 KB
/
dellinklist.c
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <stdio.h>
#include <stdlib.h>
struct Node
{
int data;
struct Node *next;
};
void linkedListTraversal(struct Node *ptr)
{
while (ptr != NULL)
{
printf("Element: %d\n", ptr->data);
ptr = ptr->next;
}
}
// Case 1: Deleting the first element from the linked list
struct Node *deleteFirst(struct Node *head)
{
struct Node *ptr = head;
head = head->next;
free(ptr);
return head;
}
// Case 2: Deleting the element at a given index from the linked list
struct Node *deleteAtIndexx(struct Node *head, int index)
{
struct Node *p = head;
struct Node *q = head->next;
for (int i = 0; i < index - 1; i++)
{
p = p->next;
q = q->next;
}
p->next = q->next;
free(q);
return head;
}
// Case 3: Deleting the last element
struct Node *deleteAtLast(struct Node *head)
{
struct Node *p = head;
struct Node *q = head->next;
while (q->next != NULL)
{
p = p->next;
q = q->next;
}
p->next = NULL;
free(q);
return head;
}
// Case 4: Deleting the element with a given value from the linked list
struct Node *deleteAtIndex(struct Node *head, int value)
{
struct Node *p = head;
struct Node *q = head->next;
while (q->data != value && q->next != NULL)
{
p = p->next;
q = q->next;
}
if (q->data == value)
{
p->next = q->next;
free(q);
}
return head;
}
int inpu(int n){
printf("Enter A numbver : ");
scanf("%d",&n);
return n;
}
int main()
{
struct Node *head;
struct Node *second;
struct Node *third;
struct Node *fourth;
// Allocate memory for nodes in the linked list in Heap
head = (struct Node *)malloc(sizeof(struct Node));
second = (struct Node *)malloc(sizeof(struct Node));
third = (struct Node *)malloc(sizeof(struct Node));
fourth = (struct Node *)malloc(sizeof(struct Node));
// Link first and second nodes
head->data = 20;
head->next = second;
// Link second and third nodes
second->data = 11;
second->next = third;
// Link third and fourth nodes
third->data = 8;
third->next = fourth;
// Terminate the list at the third node
fourth->data = 4;
fourth->next = NULL;
printf("Linked list before deletion\n");
linkedListTraversal(head);
int input;
printf("Enter Your Choice : \n");
printf("1)1st Element, 2)Given Index, 3)Last Element, 4)Given Value :");
scanf("%d", &input);
if (input == 1)
{
head = deleteFirst(head);
printf("Linked list after deletion\n");
linkedListTraversal(head);
}
else if (input == 2)
{
int n;
printf("Enter A Number : ");
scanf("%d",&n);
head = deleteAtIndexx(head, n);
printf("Linked list after deletion\n");
linkedListTraversal(head);
}
else if (input == 3)
{
head = deleteAtLast(head);
printf("Linked list after deletion\n");
linkedListTraversal(head);
}
else{
int p;
printf("Enter A Value : ");
scanf("%d",&p);
head = deleteAtIndex(head, p);
printf("Linked list after deletion\n");
linkedListTraversal(head);
}
return 0;
}