Lets code a simple singly Linked List which traverse from head to tail in one direction.
Requirement is simple, you will have a Node which contains two main elements, data and pointer to next node.
On adding a new node, the new node should create a handle of the old node and assign the pointer to the new one.
CODE:
class Node;
int id;
int data;
Node next_node;
function new ( int i );
id = i;
next_node = null;
endfunction: new
function void load_data ( int val );
data = val;
endfunction: load_data
function void add_node ( Node node );
node.next_node = new(id);
node.next_node = this;
endfunction: add_node
endclass: Node
module top;
Node n[10];
initial begin
foreach ( n[i] ) begin
n[i] = new(i);
n[i].data = $urandom_range(10,100);
if(i>0) n[i].add_node(n[i-1]);
end
foreach ( n[i] ) begin
if(i==9)
$display ( "NODE ID:%0d Data:%0d NEXT_PTR:NULL", n[i].id,n[i].data );
else
$display ( "NODE ID:%0d Data:%0d NEXT_PTR:%0d", n[i].id,n[i].data,n[i].next_node.id );
end
end
endmodule: top
RESULT:
Compiler version U-2023.03-SP2_Full64; Runtime version U-2023.03-SP2_Full64; Aug 12 10:17 2025
NODE ID:0 Data:54 NEXT_PTR:1
NODE ID:1 Data:62 NEXT_PTR:2
NODE ID:2 Data:68 NEXT_PTR:3
NODE ID:3 Data:44 NEXT_PTR:4
NODE ID:4 Data:75 NEXT_PTR:5
NODE ID:5 Data:88 NEXT_PTR:6
NODE ID:6 Data:89 NEXT_PTR:7
NODE ID:7 Data:72 NEXT_PTR:8
NODE ID:8 Data:62 NEXT_PTR:9
NODE ID:9 Data:53 NEXT_PTR:NULL
V C S S i m u l a t i o n R e p o r t