#include <stdio.h>
#include <stdlib.h>
// Node structure for linked list
typedef struct Node {
int data;
struct Node* next;
} Node;
// Create new node
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// Add node at start of linked list
void addAtStart(Node** head, int data) {
Node* newNode = createNode(data);
newNode->next = *head; // link new node to old head
*head = newNode; // update head to new node
}
// Print linked list
void printList(Node* head) {
Node* curr = head;
while (curr != NULL) {
printf("%d -> ", curr->data);
curr = curr->next;
}
printf("null\n");
}
int main() {
// Array example
int arr[6] = {1, 2, 3, 4, 5};
// Add 0 at start by shifting
for (int i = 5; i > 0; i--) {
arr[i] = arr[i - 1]; // shift right
}
arr[0] = 0;
printf("Array after adding 0 at start: ");
for (int i = 0; i < 6; i++) {
printf("[%d]", arr[i]);
}
printf("\nAccess 3rd item in array: %d\n", arr[2]);
// Linked list example
Node* head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
head->next->next->next = createNode(4);
head->next->next->next->next = createNode(5);
addAtStart(&head, 0);
printf("Linked list after adding 0 at start: ");
printList(head);
// Access 3rd item in linked list
Node* curr = head;
for (int i = 0; i < 2; i++) {
curr = curr->next; // move to 3rd node
}
printf("Access 3rd item in linked list: %d\n", curr->data);
return 0;
}
for (int i = 5; i > 0; i--) { arr[i] = arr[i - 1]; }
Shift array elements right to make space at start
Insert new element at start of array
newNode->next = *head; *head = newNode;
Add new node at start of linked list by pointer update
for (int i = 0; i < 2; i++) { curr = curr->next; }
Traverse linked list to reach 3rd node
Array after adding 0 at start: [0][1][2][3][4][5]
Access 3rd item in array: 3
Linked list after adding 0 at start: 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> null
Access 3rd item in linked list: 3