Skip to content

Commit 6f3e7f2

Browse files
committed
insertion funcs added for c
1 parent a7ee3f2 commit 6f3e7f2

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

c/LinkedList/singly/list.c

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
4+
typedef struct Node {
5+
void *data;
6+
struct Node *next;
7+
} Node;
8+
9+
typedef struct LinkedList {
10+
Node *head;
11+
} LinkedList;
12+
13+
Node *createNode(void *data) {
14+
Node *newNode = (Node *)malloc(sizeof(Node));
15+
newNode->data = data;
16+
newNode->next = NULL;
17+
return newNode;
18+
}
19+
20+
Node *getHead(LinkedList *list) {
21+
return list->head;
22+
}
23+
24+
Node *getTail(LinkedList *list) {
25+
Node *lastNode = list->head;
26+
while (lastNode && lastNode->next) {
27+
lastNode = lastNode->next;
28+
}
29+
return lastNode;
30+
}
31+
32+
void prepend(LinkedList *list, void *data) {
33+
Node *newNode = createNode(data);
34+
newNode->next = list->head;
35+
list->head = newNode;
36+
}
37+
38+
void append(LinkedList *list, void *data) {
39+
Node *newNode = createNode(data);
40+
if (!list->head) {
41+
list->head = newNode;
42+
} else {
43+
Node *lastNode = getTail(list);
44+
lastNode->next = newNode;
45+
}
46+
}
47+
48+
void insertBetween(LinkedList *list, void *data, void *after) {
49+
Node *newNode = createNode(data);
50+
Node *prevNode = list->head;
51+
52+
while (prevNode && prevNode->data != after) {
53+
prevNode = prevNode->next;
54+
}
55+
56+
if (prevNode) {
57+
newNode->next = prevNode->next;
58+
prevNode->next = newNode;
59+
}
60+
}
61+

0 commit comments

Comments
 (0)