Concept Flow - Push Using Linked List Node
Create new node with value
Set new node.next to current head
Update head to new node
Done
This flow shows how a new node is created and added at the start of the linked list by adjusting pointers.
struct Node {
value: i32,
next: Option<Box<Node>>,
}
fn push(head: &mut Option<Box<Node>>, val: i32) {
let new_node = Box::new(Node { value: val, next: head.take() });
*head = Some(new_node);
}| Step | Operation | Nodes in List | Pointer Changes | Visual State |
|---|---|---|---|---|
| 1 | Start with empty list | None | head = None | null |
| 2 | Create new node with value 10 | Node(10) -> null | new_node.next = None | 10 -> null |
| 3 | Set new_node.next to head (None) | Node(10) -> null | new_node.next = None | 10 -> null |
| 4 | Update head to new_node | Node(10) -> null | head = new_node | 10 -> null |
| 5 | Create new node with value 20 | Node(20) -> Node(10) -> null | new_node.next = head (Node(10)) | 20 -> 10 -> null |
| 6 | Set new_node.next to head (Node(10)) | Node(20) -> Node(10) -> null | new_node.next = Node(10) | 20 -> 10 -> null |
| 7 | Update head to new_node | Node(20) -> Node(10) -> null | head = new_node | 20 -> 10 -> null |
| 8 | Create new node with value 30 | Node(30) -> Node(20) -> Node(10) -> null | new_node.next = head (Node(20)) | 30 -> 20 -> 10 -> null |
| 9 | Set new_node.next to head (Node(20)) | Node(30) -> Node(20) -> Node(10) -> null | new_node.next = Node(20) | 30 -> 20 -> 10 -> null |
| 10 | Update head to new_node | Node(30) -> Node(20) -> Node(10) -> null | head = new_node | 30 -> 20 -> 10 -> null |
| 11 | End of push operations | Node(30) -> Node(20) -> Node(10) -> null | head points to Node(30) | 30 -> 20 -> 10 -> null |
| Variable | Start | After Step 2 | After Step 5 | After Step 8 | Final |
|---|---|---|---|---|---|
| head | None | Node(10) | Node(20) | Node(30) | Node(30) |
| new_node | None | Node(10) | Node(20) | Node(30) | None (last new_node moved to head) |
| new_node.next | None | None | Node(10) | Node(20) | N/A |
Push Using Linked List Node: - Create new node with value - Set new_node.next to current head - Update head to new_node - New node becomes list start - Preserves existing nodes by linking - Works even if list is empty
push operation do in a linked list when using a node?struct Node {
data: i32,
next: Option,
}
fn push(head: &mut Option, data: i32) {
let new_node = Box::new(Node { data, next: head.take() });
*head = Some(new_node);
}
fn print_list(head: &Option) {
let mut current = head;
while let Some(node) = current {
print!("{} -> ", node.data);
current = &node.next;
}
println!("null");
}
fn main() {
let mut head = None;
push(&mut head, 10);
push(&mut head, 20);
push(&mut head, 30);
print_list(&head);
}fn push(head: &mut Option, data: i32) {
let new_node = Box::new(Node { data, next: head });
*head = Some(new_node);
}Pass the test and this pattern moves unknown