Insert Node Before Specified Position Linked List C

Following our last tutorial where we insert a node after a certain position, in this one we will learn how to insert node before specified position in a C linked list.

As our previous lessons on this subject, the below function is meant to be used with the linked list example we did in the first tutorial so.

How to insert node before specified position

To do so we must check to things:

1. That the list is not null.
2. That the position is valid.
• This means that we cannot insert before 0 element or after the last one.

```struct Person* addBefore(struct Person* list, char* name, int age, int before) {
if (list != NULL) {
if (before < 0) {
//invalid position
return list;
} else if (before == 0) {
return list;
} else if (before <= (list->listSize - 1)) {
struct Person* temp = list;
int i = 0;
while (temp) {
if (i == before - 1) {
break;
}
temp = temp->next;
i++;
}
struct Person* originalNextElement = temp->next;
struct Person* newPersonNode = (struct Person*) calloc(1, sizeof(struct Person));
newPersonNode->name = (char*)calloc(strlen(name) + 1, sizeof(char));
strcpy(newPersonNode->name, name);
newPersonNode->age = age;
temp->next = newPersonNode;
newPersonNode->next = originalNextElement;
list->listSize++;
return list;
} else {
//position exceeds last element
return list;
}
} else {
//list is null
return NULL;
}
};
```

In the below main() method we create a list with four elements. Then we want to add “jacob” before the 2nd element. This means we want to add jacob before sam.

```int main() {
struct Person* list = NULL;

list = addBefore(list, "jacob", 49, 2);

printf("List size is: %d\n", list->listSize);
printList(list);

return 0;
}
```

Output:

```List size is: 5
mike, age: 23
joe, age: 54
jacob, age: 49
sam, age: 30
john, age: 28
```