File tree Expand file tree Collapse file tree 1 file changed +61
-0
lines changed
Expand file tree Collapse file tree 1 file changed +61
-0
lines changed Original file line number Diff line number Diff line change 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+
You can’t perform that action at this time.
0 commit comments