Bird
Raised Fist0
DSA Javascriptprogramming~20 mins

Adjacency List Representation in DSA Javascript - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Adjacency List Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of adjacency list after adding edges
What is the output of the adjacency list after running the following code?
DSA Javascript
class Graph {
  constructor() {
    this.adjList = {};
  }

  addVertex(v) {
    if (!this.adjList[v]) this.adjList[v] = [];
  }

  addEdge(v, w) {
    this.adjList[v].push(w);
    this.adjList[w].push(v);
  }
}

const g = new Graph();
g.addVertex('A');
g.addVertex('B');
g.addVertex('C');
g.addEdge('A', 'B');
g.addEdge('A', 'C');
console.log(g.adjList);
A{"A": ["B", "C"], "B": ["C"], "C": ["A", "B"]}
B{"A": ["B"], "B": ["A", "C"], "C": ["A"]}
C{"A": ["B", "C"], "B": ["A"], "C": ["A"]}
D{"A": ["B", "C"], "B": ["A"], "C": []}
Attempts:
2 left
💡 Hint
Remember that addEdge adds each vertex to the other's adjacency list.
❓ Predict Output
intermediate
2:00remaining
Resulting adjacency list after removing a vertex
What is the adjacency list after removing vertex 'B' from the graph below?
DSA Javascript
class Graph {
  constructor() {
    this.adjList = {};
  }

  addVertex(v) {
    if (!this.adjList[v]) this.adjList[v] = [];
  }

  addEdge(v, w) {
    this.adjList[v].push(w);
    this.adjList[w].push(v);
  }

  removeVertex(v) {
    while(this.adjList[v].length) {
      const adjVertex = this.adjList[v].pop();
      this.adjList[adjVertex] = this.adjList[adjVertex].filter(x => x !== v);
    }
    delete this.adjList[v];
  }
}

const g = new Graph();
g.addVertex('A');
g.addVertex('B');
g.addVertex('C');
g.addEdge('A', 'B');
g.addEdge('B', 'C');
g.removeVertex('B');
console.log(g.adjList);
A{"A": [], "B": [], "C": []}
B{"A": [], "C": []}
C{"A": ["B"], "C": ["B"]}
D{"A": [], "C": ["A"]}
Attempts:
2 left
💡 Hint
Removing a vertex also removes it from other vertices' adjacency lists.
🔧 Debug
advanced
2:00remaining
Identify the error in adjacency list edge addition
What error does the following code produce when adding an edge?
DSA Javascript
class Graph {
  constructor() {
    this.adjList = {};
  }

  addVertex(v) {
    if (!this.adjList[v]) this.adjList[v] = [];
  }

  addEdge(v, w) {
    this.adjList[v].push(w);
    this.adjList[w].push(v);
  }
}

const g = new Graph();
g.addVertex('A');
g.addEdge('A', 'B');
ATypeError: Cannot read property 'push' of undefined
BReferenceError: g is not defined
CSyntaxError: Unexpected token '.'
DNo error, runs successfully
Attempts:
2 left
💡 Hint
Check if both vertices exist before adding edges.
❓ Predict Output
advanced
2:00remaining
Output of adjacency list after directed edge additions
What is the adjacency list after adding directed edges as shown?
DSA Javascript
class DirectedGraph {
  constructor() {
    this.adjList = {};
  }

  addVertex(v) {
    if (!this.adjList[v]) this.adjList[v] = [];
  }

  addEdge(v, w) {
    this.adjList[v].push(w);
  }
}

const g = new DirectedGraph();
g.addVertex('X');
g.addVertex('Y');
g.addVertex('Z');
g.addEdge('X', 'Y');
g.addEdge('Y', 'Z');
console.log(g.adjList);
A{"X": [], "Y": ["Z"], "Z": []}
B{"X": ["Y"], "Y": ["Z"], "Z": ["X"]}
C{"X": ["Y", "Z"], "Y": ["Z"], "Z": []}
D{"X": ["Y"], "Y": ["Z"], "Z": []}
Attempts:
2 left
💡 Hint
Directed edges only add one-way connections.
🧠 Conceptual
expert
2:00remaining
Number of edges in an undirected graph adjacency list
Given an undirected graph represented by an adjacency list where each vertex's list contains its neighbors, how do you calculate the total number of edges?
ASum the lengths of all adjacency lists and divide by 2
BSum the lengths of all adjacency lists without division
CSum the lengths of all adjacency lists and multiply by 2
DCount the number of vertices and subtract 1
Attempts:
2 left
💡 Hint
Each edge appears twice in an undirected graph adjacency list.

Practice

(1/5)
1. What does an adjacency list represent in a graph data structure?
easy
A. A list where each node stores its neighbors
B. A matrix showing connections between nodes
C. A list of all nodes without connections
D. A list of edges sorted by weight

Solution

  1. Step 1: Understand adjacency list concept

    An adjacency list stores each node with a list of its neighbors or connected nodes.
  2. Step 2: Compare with other graph representations

    An adjacency matrix is a 2D array, not a list of neighbors. Other options describe different structures.
  3. Final Answer:

    A list where each node stores its neighbors -> Option A
  4. Quick Check:

    Adjacency list = neighbors list [OK]
Hint: Adjacency list always stores neighbors for each node [OK]
Common Mistakes:
  • Confusing adjacency list with adjacency matrix
  • Thinking it stores edges sorted by weight
  • Assuming it lists nodes without connections only
2. Which of the following is the correct JavaScript syntax to initialize an empty adjacency list for a graph?
easy
A. const graph = [];
B. const graph = new Map();
C. const graph = {};
D. const graph = new Set();

Solution

  1. Step 1: Identify suitable data structure for adjacency list

    An adjacency list can be implemented using a Map to store nodes and their neighbors efficiently.
  2. Step 2: Check syntax correctness

    new Map() creates an empty map. Arrays or objects can be used but Map is preferred for graph keys. Set is for unique values, not key-value pairs.
  3. Final Answer:

    const graph = new Map(); -> Option B
  4. Quick Check:

    Use Map() for adjacency list initialization [OK]
Hint: Use Map() to store nodes and neighbors in adjacency list [OK]
Common Mistakes:
  • Using Set which does not store key-value pairs
  • Using empty array which is less clear for key-value
  • Using empty object but Map is better for keys
3. Given the following adjacency list representation in JavaScript, what will be the output of console.log(graph.get('A'));?
const graph = new Map();
graph.set('A', ['B', 'C']);
graph.set('B', ['A', 'D']);
graph.set('C', ['A']);
graph.set('D', ['B']);
medium
A. ['B', 'D']
B. ['A', 'D']
C. ['C', 'D']
D. ['B', 'C']

Solution

  1. Step 1: Locate the key 'A' in the adjacency list

    The graph Map has key 'A' with value ['B', 'C'] representing neighbors.
  2. Step 2: Understand what graph.get('A') returns

    It returns the array of neighbors for 'A', which is ['B', 'C'].
  3. Final Answer:

    ['B', 'C'] -> Option D
  4. Quick Check:

    graph.get('A') = ['B', 'C'] [OK]
Hint: graph.get(node) returns neighbors array for that node [OK]
Common Mistakes:
  • Confusing neighbors of 'A' with neighbors of 'B'
  • Expecting a string instead of array
  • Mixing up keys and values in Map
4. The following code attempts to add an edge from node 'A' to node 'D' in an adjacency list but has a bug. What is the error?
const graph = new Map();
graph.set('A', ['B', 'C']);
// Add edge from A to D
graph.get('A').push('D');
console.log(graph.get('A'));
medium
A. graph.get('A') returns undefined causing error
B. Cannot push to array returned by graph.get('A')
C. The code works correctly and adds 'D' to neighbors
D. graph.set should be used instead of push

Solution

  1. Step 1: Check if graph.get('A') returns an array

    graph.get('A') returns ['B', 'C'], an array, so push is valid.
  2. Step 2: Verify if push adds 'D' correctly

    push('D') adds 'D' to the array, so neighbors become ['B', 'C', 'D'].
  3. Final Answer:

    The code works correctly and adds 'D' to neighbors -> Option C
  4. Quick Check:

    push on neighbors array works [OK]
Hint: graph.get(node) returns array; push adds neighbor [OK]
Common Mistakes:
  • Assuming graph.get returns undefined if key exists
  • Thinking push cannot modify array in Map
  • Confusing push with set method
5. You want to represent a directed graph with nodes 'X', 'Y', 'Z' where edges are X->Y, Y->Z, and Z->X. Which adjacency list correctly represents this graph in JavaScript?
hard
A. const graph = new Map([['X', ['Y']], ['Y', ['Z']], ['Z', ['X']]]);
B. const graph = new Map([['X', ['Y', 'Z']], ['Y', ['X']], ['Z', ['Y']]]);
C. const graph = new Map([['X', ['Z']], ['Y', ['X']], ['Z', ['Y']]]);
D. const graph = new Map([['X', ['Y']], ['Y', ['X', 'Z']], ['Z', []]]);

Solution

  1. Step 1: Understand directed edges

    Edges are X->Y, Y->Z, Z->X, so each node points only to its direct neighbors.
  2. Step 2: Match edges to adjacency list entries

    'X' neighbors: ['Y'], 'Y' neighbors: ['Z'], 'Z' neighbors: ['X'] matches const graph = new Map([['X', ['Y']], ['Y', ['Z']], ['Z', ['X']]]); exactly.
  3. Final Answer:

    const graph = new Map([['X', ['Y']], ['Y', ['Z']], ['Z', ['X']]]); -> Option A
  4. Quick Check:

    Directed edges match adjacency list neighbors [OK]
Hint: Each node's list shows only nodes it points to [OK]
Common Mistakes:
  • Including neighbors that don't have edges from the node
  • Mixing up direction of edges
  • Adding extra neighbors not in edges
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard