# Insert a Node at the Beginning of a Singly Linked List

## Inserting a Node at the Beginning

Inserting a node at the beginning of a singly linked list involves creating a new node and updating the head reference to point to this new node. This operation is efficient as it only requires updating a few pointers.

## Step-by-Step Process

Consider a singly linked list with the following structure before insertion:

```
Head -> 1 -> 2 -> 3 -> 4 -> None
```

We want to insert a new node with the value 0 at the beginning. Follow these steps:

**Create a New Node**: Create a new node with the desired value (0).**Set the New Node's Next Reference**: Update the next reference of the new node to point to the current head of the list.**Update the Head Reference**: Update the head reference to point to the new node.

After performing these steps, the linked list will have the following structure:

```
Head -> 0 -> 1 -> 2 -> 3 -> 4 -> None
```

## Python Program to Insert a Node at the Beginning

```
class Node:
def __init__(self, data):
self.data = data
self.next = None
class SinglyLinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
else:
current = self.head
while current.next:
current = current.next
current.next = new_node
def insert_at_beginning(self, data):
new_node = Node(data)
new_node.next = self.head
self.head = new_node
def traverse(self):
current = self.head
while current:
print(current.data, end=" -> ")
current = current.next
print("None")
# Example usage:
linked_list = SinglyLinkedList()
linked_list.append(1)
linked_list.append(2)
linked_list.append(3)
linked_list.append(4)
print("Linked list before insertion:")
linked_list.traverse() # Output: 1 -> 2 -> 3 -> 4 -> None
linked_list.insert_at_beginning(0)
print("Linked list after insertion at the beginning:")
linked_list.traverse() # Output: 0 -> 1 -> 2 -> 3 -> 4 -> None
```

This Python program defines a singly linked list with methods for appending nodes, inserting a node at the beginning, and traversing the list. The insert_at_beginning method creates a new node, sets its next reference to the current head, and updates the head reference to the new node.