Add and Remove Edge in Adjacency List representation of a Graph (original) (raw)
Last Updated : 12 Jul, 2025
Prerequisites: Graph and Its Representation
In this article, adding and removing edge is discussed in a given adjacency list representation.
A vector has been used to implement the graph using adjacency list representation. It is used to store the adjacency lists of all the vertices. The vertex number is used as the index in this vector.
Example:
Below is a graph and its adjacency list representation:
If the edge between 1 and 4 has to be removed, then the above graph and the adjacency list transforms to:
Approach: The idea is to represent the graph as an array of vectors such that every vector represents adjacency list of the vertex.
- Adding an edge: Adding an edge is done by inserting both of the vertices connected by that edge in each others list. For example, if an edge between (u, v) has to be added, then u is stored in v's vector list and v is stored in u's vector list. (push_back)
- Deleting an edge: To delete edge between (u, v), u's adjacency list is traversed until v is found and it is removed from it. The same operation is performed for v.(erase)
Below is the implementation of the approach:
C++ `
// C++ implementation of the above approach
#include <bits/stdc++.h> using namespace std;
// A utility function to add an edge in an // undirected graph. void addEdge(vector adj[], int u, int v) { adj[u].push_back(v); adj[v].push_back(u); }
// A utility function to delete an edge in an // undirected graph. void delEdge(vector adj[], int u, int v) { // Traversing through the first vector list // and removing the second element from it for (int i = 0; i < adj[u].size(); i++) { if (adj[u][i] == v) { adj[u].erase(adj[u].begin() + i); break; } }
// Traversing through the second vector list
// and removing the first element from it
for (int i = 0; i < adj[v].size(); i++) {
if (adj[v][i] == u) {
adj[v].erase(adj[v].begin() + i);
break;
}
}}
// A utility function to print the adjacency list // representation of graph void printGraph(vector adj[], int V) { for (int v = 0; v < V; ++v) { cout << "vertex " << v << " "; for (auto x : adj[v]) cout << "-> " << x; printf("\n"); } printf("\n"); }
// Driver code int main() { int V = 5; vector adj[V];
// Adding edge as shown in the example figure
addEdge(adj, 0, 1);
addEdge(adj, 0, 4);
addEdge(adj, 1, 2);
addEdge(adj, 1, 3);
addEdge(adj, 1, 4);
addEdge(adj, 2, 3);
addEdge(adj, 3, 4);
// Printing adjacency matrix
printGraph(adj, V);
// Deleting edge (1, 4)
// as shown in the example figure
delEdge(adj, 1, 4);
// Printing adjacency matrix
printGraph(adj, V);
return 0;}
Java
// Java implementation of the above approach import java.util.*;
class GFG {
// A utility function to add an edge in an // undirected graph. static void addEdge(Vector adj[], int u, int v) { adj[u].add(v); adj[v].add(u); }
// A utility function to delete an edge in an // undirected graph. static void delEdge(Vector adj[], int u, int v) { // Traversing through the first vector list // and removing the second element from it for (int i = 0; i < adj[u].size(); i++) { if (adj[u].get(i) == v) { adj[u].remove(i); break; } }
// Traversing through the second vector list
// and removing the first element from it
for (int i = 0; i < adj[v].size(); i++)
{
if (adj[v].get(i) == u)
{
adj[v].remove(i);
break;
}
}}
// A utility function to print the adjacency list // representation of graph static void printGraph(Vector adj[], int V) { for (int v = 0; v < V; ++v) { System.out.print("vertex " + v+ " "); for (Integer x : adj[v]) System.out.print("-> " + x); System.out.printf("\n"); } System.out.printf("\n"); }
// Driver code public static void main(String[] args) { int V = 5; Vector []adj = new Vector[V]; for (int i = 0; i < V; i++) adj[i] = new Vector();
// Adding edge as shown in the example figure
addEdge(adj, 0, 1);
addEdge(adj, 0, 4);
addEdge(adj, 1, 2);
addEdge(adj, 1, 3);
addEdge(adj, 1, 4);
addEdge(adj, 2, 3);
addEdge(adj, 3, 4);
// Printing adjacency matrix
printGraph(adj, V);
// Deleting edge (1, 4)
// as shown in the example figure
delEdge(adj, 1, 4);
// Printing adjacency matrix
printGraph(adj, V);} }
// This code is contributed by 29AjayKumar
Python3
Python3 implementation of the above approach
A utility function to add an edge in an
undirected graph.
def addEdge(adj, u, v):
adj[u].append(v);
adj[v].append(u);A utility function to delete an edge in an
undirected graph.
def delEdge(adj, u, v):
# Traversing through the first vector list
# and removing the second element from it
for i in range(len(adj[u])):
if (adj[u][i] == v):
adj[u].pop(i);
break;
# Traversing through the second vector list
# and removing the first element from it
for i in range(len(adj[v])):
if (adj[v][i] == u):
adj[v].pop(i);
break;
A utility function to pr the adjacency list
representation of graph
def prGraph(adj, V):
for v in range(V):
print("vertex " + str(v), end = ' ')
for x in adj[v]:
print("-> " + str(x), end = '')
print()
print()Driver code
if name=='main':
V = 5;
adj = [[] for i in range(V)]
# Adding edge as shown in the example figure
addEdge(adj, 0, 1);
addEdge(adj, 0, 4);
addEdge(adj, 1, 2);
addEdge(adj, 1, 3);
addEdge(adj, 1, 4);
addEdge(adj, 2, 3);
addEdge(adj, 3, 4);
# Print adjacency matrix
prGraph(adj, V);
# Deleting edge (1, 4)
# as shown in the example figure
delEdge(adj, 1, 4);
# Print adjacency matrix
prGraph(adj, V);This code is contributed by rutvik_56
C#
// C# implementation of the above approach using System; using System.Collections.Generic;
class GFG {
// A utility function to add an edge in an // undirected graph. static void addEdge(List []adj, int u, int v) { adj[u].Add(v); adj[v].Add(u); }
// A utility function to delete an edge in an // undirected graph. static void delEdge(List []adj, int u, int v) { // Traversing through the first vector list // and removing the second element from it for (int i = 0; i < adj[u].Count; i++) { if (adj[u][i] == v) { adj[u].RemoveAt(i); break; } }
// Traversing through the second vector list
// and removing the first element from it
for (int i = 0; i < adj[v].Count; i++)
{
if (adj[v][i] == u)
{
adj[v].RemoveAt(i);
break;
}
}}
// A utility function to print the adjacency list // representation of graph static void printGraph(List []adj, int V) { for (int v = 0; v < V; ++v) { Console.Write("vertex " + v + " "); foreach (int x in adj[v]) Console.Write("-> " + x); Console.Write("\n"); } Console.Write("\n"); }
// Driver code public static void Main(String[] args) { int V = 5; List []adj = new List[V]; for (int i = 0; i < V; i++) adj[i] = new List();
// Adding edge as shown in the example figure
addEdge(adj, 0, 1);
addEdge(adj, 0, 4);
addEdge(adj, 1, 2);
addEdge(adj, 1, 3);
addEdge(adj, 1, 4);
addEdge(adj, 2, 3);
addEdge(adj, 3, 4);
// Printing adjacency matrix
printGraph(adj, V);
// Deleting edge (1, 4)
// as shown in the example figure
delEdge(adj, 1, 4);
// Printing adjacency matrix
printGraph(adj, V);} }
// This code is contributed by PrinciRaj1992
` JavaScript ``
// JavaScript implementation of the approach // to delete an edge in an undirected graph
const addEdge = (adj, u, v) => { // add the edge to the graph by adding v to the // list of u and adding u to the list of v adj[u].push(v); adj[v].push(u); };
const delEdge = (adj, u, v) => { // find the index of v in the list of u and remove it const indexOfVInU = adj[u].indexOf(v); adj[u].splice(indexOfVInU, 1);
// find the index of u in the list of v and remove it const indexOfUInV = adj[v].indexOf(u); adj[v].splice(indexOfUInV, 1); };
const printGraph = (adj, V) => {
for (let v = 0; v < V; v++) {
console.log(vertex ${v} , adj[v].join("-> "));
}
};
const main = () => { const V = 5; const adj = []; for (let i = 0; i < V; i++) { adj[i] = []; }
// Adding edge as shown in the example figure addEdge(adj, 0, 1); addEdge(adj, 0, 4); addEdge(adj, 1, 2); addEdge(adj, 1, 3); addEdge(adj, 1, 4); addEdge(adj, 2, 3); addEdge(adj, 3, 4);
// Printing adjacency matrix printGraph(adj, V);
// Deleting edge (1, 4) // as shown in the example figure delEdge(adj, 1, 4);
// Printing adjacency matrix printGraph(adj, V); };
main();
``
Output:
vertex 0 -> 1-> 4 vertex 1 -> 0-> 2-> 3-> 4 vertex 2 -> 1-> 3 vertex 3 -> 1-> 2-> 4 vertex 4 -> 0-> 1-> 3
vertex 0 -> 1-> 4 vertex 1 -> 0-> 2-> 3 vertex 2 -> 1-> 3 vertex 3 -> 1-> 2-> 4 vertex 4 -> 0-> 3
Time Complexity: Removing an edge from adjacent list requires, on the average time complexity will be O(|E| / |V|) , which may result in cubical complexity for dense graphs to remove all edges.
Auxiliary Space: O(V) , here V is number of vertices.



