Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
LinkedList usage
📖 Scenario: You are managing a waiting list for a small cafe. Customers arrive and are added to the list in order. Sometimes, customers leave the list before being served.
🎯 Goal: You will create a linked list to hold customer names, add customers to the list, remove a customer who leaves early, and finally display the current waiting list.
📋 What You'll Learn
Use the LinkedList<string> class
Add customers to the linked list using AddLast
Remove a specific customer using Remove
Iterate over the linked list to print all customer names
💡 Why This Matters
🌍 Real World
Linked lists are useful when you need to add or remove items quickly from the start or end of a list, like managing queues or waiting lists.
💼 Career
Understanding linked lists helps in software development roles that involve data structures, improving your ability to write efficient and flexible code.
Progress0 / 4 steps
1
Create the linked list
Create a LinkedList<string> called waitingList and add these customers in order using AddLast: "Alice", "Bob", "Charlie".
C Sharp (C#)
Hint
Use LinkedList<string> waitingList = new LinkedList<string>(); to create the list. Then add each name with waitingList.AddLast(name);.
2
Remove a customer
Create a variable called customerToRemove and set it to "Bob". Then remove customerToRemove from waitingList using the Remove method.
C Sharp (C#)
Hint
Set string customerToRemove = "Bob"; and then call waitingList.Remove(customerToRemove);.
3
Iterate over the linked list
Use a foreach loop with variable customer to go through waitingList and add each customer to a new List<string> called currentCustomers.
C Sharp (C#)
Hint
Create List<string> currentCustomers = new List<string>(); then use foreach (string customer in waitingList) to add each customer.
4
Print the current waiting list
Use a foreach loop with variable customer to print each name in currentCustomers on its own line using Console.WriteLine.
C Sharp (C#)
Hint
Use foreach (string customer in currentCustomers) and inside the loop write Console.WriteLine(customer);.
Practice
(1/5)
1. What is a key characteristic of a LinkedList in C#?
easy
A. It stores elements in nodes linked by references.
B. It stores elements in a fixed-size array.
C. It only allows adding elements at the end.
D. It cannot remove elements once added.
Solution
Step 1: Understand LinkedList structure
A LinkedList stores elements in nodes, where each node points to the next (and possibly previous) node.
Step 2: Compare options with LinkedList behavior
Only It stores elements in nodes linked by references. correctly describes this linked node structure; others describe arrays or incorrect behaviors.
Final Answer:
It stores elements in nodes linked by references. -> Option A
Quick Check:
LinkedList = nodes linked by references [OK]
Hint: LinkedList uses nodes connected by links, not arrays. [OK]
Common Mistakes:
Thinking LinkedList uses arrays internally
Assuming LinkedList only adds at the end
Believing LinkedList cannot remove elements
2. Which of the following is the correct way to add an element at the start of a LinkedList<int> named list?
easy
A. list.AddStart(10);
B. list.AddFirst(10);
C. list.InsertAt(0, 10);
D. list.PushFront(10);
Solution
Step 1: Recall LinkedList method names
The method to add an element at the start is AddFirst.
Step 2: Check each option's validity
Only AddFirst is a valid LinkedList method; others are invalid or do not exist.
Final Answer:
list.AddFirst(10); -> Option B
Quick Check:
AddFirst adds at start [OK]
Hint: Use AddFirst to add at the start of LinkedList. [OK]
Common Mistakes:
Using non-existent methods like AddStart or PushFront
Confusing LinkedList with List methods
Trying to use InsertAt which LinkedList does not have
3. What will be the output of this C# code?
var list = new LinkedList<string>();
list.AddLast("apple");
list.AddFirst("banana");
list.AddLast("cherry");
foreach(var item in list) Console.Write(item + " ");
medium
A. banana apple cherry
B. apple banana cherry
C. cherry apple banana
D. banana cherry apple
Solution
Step 1: Track insertion order
First, "apple" is added last, so list: apple. Then "banana" added first, so list: banana, apple. Then "cherry" added last, so list: banana, apple, cherry.
Step 2: Understand foreach iteration order
Foreach iterates from first to last node, so output is "banana apple cherry ".
Final Answer:
banana apple cherry -> Option A
Quick Check:
First = banana, last = cherry [OK]
Hint: AddFirst puts item at start; AddLast at end. [OK]
Common Mistakes:
Assuming AddLast adds at start
Confusing order of AddFirst and AddLast
Expecting output in reverse order
4. Identify the error in this code snippet:
var list = new LinkedList<int>();
list.AddFirst(1);
list.AddLast(2);
list.Remove(3);
Console.WriteLine(list.Count);
medium
A. Remove(3) throws an exception because 3 is not in the list.
B. Count property does not exist on LinkedList.
C. AddFirst and AddLast methods are invalid for LinkedList.
D. Remove(3) does nothing since 3 is not found; Count remains 2.
Solution
Step 1: Understand Remove behavior
Remove(value) tries to remove the first node with that value. If not found, it does nothing and returns false; no exception is thrown.
Step 2: Check Count after removal attempt
Since 3 is not in the list, list remains with 2 elements; Count is 2.
Final Answer:
Remove(3) does nothing since 3 is not found; Count remains 2. -> Option D
Quick Check:
Remove missing value = no error, Count unchanged [OK]
Hint: Remove missing item does not throw error, just returns false. [OK]
Common Mistakes:
Expecting Remove to throw exception if item missing
Thinking AddFirst/AddLast are invalid
Assuming Count is not a property
5. Given a LinkedList<int> with values 1, 2, 3, 4, 5, which code snippet correctly removes all even numbers from the list?
hard
A. foreach(var node in list) { if(node % 2 == 0) list.Remove(node); }
B. for(int i = 0; i < list.Count; i++) { if(list.ElementAt(i) % 2 == 0) list.Remove(list.ElementAt(i)); }
C. var current = list.First; while(current != null) { var next = current.Next; if(current.Value % 2 == 0) list.Remove(current); current = next; }
D. list.RemoveAll(x => x % 2 == 0);
Solution
Step 1: Understand safe removal during iteration
Removing nodes while iterating requires storing next node before removal to avoid invalid references.
Step 2: Analyze each option
foreach(var node in list) { if(node % 2 == 0) list.Remove(node); } uses foreach which throws error on modification during iteration. var current = list.First; while(current != null) { var next = current.Next; if(current.Value % 2 == 0) list.Remove(current); current = next; } correctly uses a while loop with next node saved. for(int i = 0; i < list.Count; i++) { if(list.ElementAt(i) % 2 == 0) list.Remove(list.ElementAt(i)); } uses ElementAt which is inefficient and unsafe. list.RemoveAll(x => x % 2 == 0); is invalid as LinkedList has no RemoveAll method.
Final Answer:
var current = list.First; while(current != null) { var next = current.Next; if(current.Value % 2 == 0) list.Remove(current); current = next; } -> Option C
Quick Check:
Use while loop with next saved to remove nodes safely [OK]
Hint: Save next node before removal to avoid iteration errors. [OK]
Common Mistakes:
Modifying list inside foreach causes runtime error