Doubly Linked List - Count nodes
Counting nodes in a doubly linked list is very useful while working on it. It requires creating a temp node pointing to the head of the list and a variable called i with initial value 0. If the temp node is not null, increase i by 1 and move to the next node using temp next. Repeat the process till the temp node becomes null. The final value of i will be the total number of nodes in the doubly linked list.
The function countNodes is created for this purpose. It is a 4-step process.
int countNodes() { //1. create a temp node pointing to head Node* temp = head; //2. create a variable to count nodes int i = 0; //3. if the temp node is not null increase // i by 1 and move to the next node, repeat // the process till the temp becomes null while(temp != NULL) { i++; temp = temp->next; } //4. return the count return i; }
int countNodes(struct Node* head_ref) { //1. create a temp node pointing to head struct Node* temp = head_ref; //2. create a variable to count nodes int i = 0; //3. if the temp node is not null increase // i by 1 and move to the next node, repeat // the process till the temp becomes null while (temp != NULL) { i++; temp = temp->next; } //4. return the count return i; }
def countNodes(self): #1. create a temp node pointing to head temp = self.head #2. create a variable to count nodes i = 0 #3. if the temp node is not null increase # i by 1 and move to the next node, repeat # the process till the temp becomes null while (temp != None): i += 1 temp = temp.next #4. return the count return i
int countNodes() { //1. create a temp node pointing to head Node temp = new Node(); temp = this.head; //2. create a variable to count nodes int i = 0; //3. if the temp node is not null increase // i by 1 and move to the next node, repeat // the process till the temp becomes null while(temp != null) { i++; temp = temp.next; } //4. return the count return i; }
public int countNodes() { //1. create a temp node pointing to head Node temp = new Node(); temp = this.head; //2. create a variable to count nodes int i = 0; //3. if the temp node is not null increase // i by 1 and move to the next node, repeat // the process till the temp becomes null while(temp != null) { i++; temp = temp.next; } //4. return the count return i; }
public function countNodes() { //1. create a temp node pointing to head $temp = new Node(); $temp = $this->head; //2. create a variable to count nodes $i = 0; //3. if the temp node is not null increase // i by 1 and move to the next node, repeat // the process till the temp becomes null while($temp != null) { $i++; $temp = $temp->next; } //4. return the count return $i; }
The below is a complete program that uses above discussed concept of counting the total number of nodes of a doubly linked list.
#include <iostream> using namespace std; //node structure struct Node { int data; Node* next; Node* prev; }; class LinkedList { private: Node* head; public: LinkedList(){ head = NULL; } //Add new element at the end of the list void push_back(int newElement) { Node* newNode = new Node(); newNode->data = newElement; newNode->next = NULL; newNode->prev = NULL; if(head == NULL) { head = newNode; } else { Node* temp = head; while(temp->next != NULL) temp = temp->next; temp->next = newNode; newNode->prev = temp; } } //count nodes in the list int countNodes() { Node* temp = head; int i = 0; while(temp != NULL) { i++; temp = temp->next; } return i; } //display the content of the list void PrintList() { Node* temp = head; if(temp != NULL) { cout<<"The list contains: "; while(temp != NULL) { cout<<temp->data<<" "; temp = temp->next; } cout<<"\n"; } else { cout<<"The list is empty.\n"; } } }; // test the code int main() { LinkedList MyList; //Add four elements in the list. MyList.push_back(10); MyList.push_back(20); MyList.push_back(30); MyList.push_back(40); //Display the content of the list. MyList.PrintList(); //number of nodes in the list cout<<"No. of nodes: "<<MyList.countNodes(); return 0; }
The above code will give the following output:
The list contains: 10 20 30 40 No. of nodes: 4
#include <stdio.h> #include <stdlib.h> //node structure struct Node { int data; struct Node* next; struct Node* prev; }; //Add new element at the end of the list void push_back(struct Node** head_ref, int newElement) { struct Node *newNode, *temp; newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = newElement; newNode->next = NULL; newNode->prev = NULL; if(*head_ref == NULL) { *head_ref = newNode; } else { temp = *head_ref; while(temp->next != NULL) { temp = temp->next; } temp->next = newNode; newNode->prev = temp; } } //count nodes in the list int countNodes(struct Node* head_ref) { struct Node* temp = head_ref; int i = 0; while (temp != NULL) { i++; temp = temp->next; } return i; } //display the content of the list void PrintList(struct Node* head_ref) { struct Node* temp = head_ref; if(head_ref != NULL) { printf("The list contains: "); while (temp != NULL) { printf("%i ",temp->data); temp = temp->next; } printf("\n"); } else { printf("The list is empty.\n"); } } // test the code int main() { struct Node* MyList = NULL; //Add four elements in the list. push_back(&MyList, 10); push_back(&MyList, 20); push_back(&MyList, 30); push_back(&MyList, 40); //Display the content of the list. PrintList(MyList); //number of nodes in the list printf("No. of nodes: %i",countNodes(MyList)); return 0; }
The above code will give the following output:
The list contains: 10 20 30 40 No. of nodes: 4
# node structure class Node: def __init__(self, data): self.data = data self.next = None self.prev = None #class Linked List class LinkedList: def __init__(self): self.head = None #Add new element at the end of the list def push_back(self, newElement): newNode = Node(newElement) if(self.head == None): self.head = newNode return else: temp = self.head while(temp.next != None): temp = temp.next temp.next = newNode newNode.prev = temp #count nodes in the list def countNodes(self): temp = self.head i = 0 while (temp != None): i += 1 temp = temp.next return i #display the content of the list def PrintList(self): temp = self.head if(temp != None): print("The list contains:", end=" ") while (temp != None): print(temp.data, end=" ") temp = temp.next print() else: print("The list is empty.") # test the code MyList = LinkedList() #Add four elements in the list. MyList.push_back(10) MyList.push_back(20) MyList.push_back(30) MyList.push_back(40) #Display the content of the list. MyList.PrintList() #number of nodes in the list print("No. of nodes: ", MyList.countNodes())
The above code will give the following output:
The list contains: 10 20 30 40 No. of nodes: 4
//node structure class Node { int data; Node next; Node prev; }; class LinkedList { Node head; LinkedList(){ head = null; } //Add new element at the end of the list void push_back(int newElement) { Node newNode = new Node(); newNode.data = newElement; newNode.next = null; newNode.prev = null; if(head == null) { head = newNode; } else { Node temp = new Node(); temp = head; while(temp.next != null) temp = temp.next; temp.next = newNode; newNode.prev = temp; } } //count nodes in the list int countNodes() { Node temp = new Node(); temp = this.head; int i = 0; while(temp != null) { i++; temp = temp.next; } return i; } //display the content of the list void PrintList() { Node temp = new Node(); temp = this.head; if(temp != null) { System.out.print("The list contains: "); while(temp != null) { System.out.print(temp.data + " "); temp = temp.next; } System.out.println(); } else { System.out.println("The list is empty."); } } }; // test the code public class Implementation { public static void main(String[] args) { LinkedList MyList = new LinkedList(); //Add four elements in the list. MyList.push_back(10); MyList.push_back(20); MyList.push_back(30); MyList.push_back(40); //Display the content of the list. MyList.PrintList(); //number of nodes in the list System.out.print("No. of nodes: "+ MyList.countNodes()); } }
The above code will give the following output:
The list contains: 10 20 30 40 No. of nodes: 4
using System; //node structure class Node { public int data; public Node next; public Node prev; }; class LinkedList { Node head; public LinkedList(){ head = null; } //Add new element at the end of the list public void push_back(int newElement) { Node newNode = new Node(); newNode.data = newElement; newNode.next = null; newNode.prev = null; if(head == null) { head = newNode; } else { Node temp = new Node(); temp = head; while(temp.next != null) temp = temp.next; temp.next = newNode; newNode.prev = temp; } } //count nodes in the list public int countNodes() { Node temp = new Node(); temp = this.head; int i = 0; while(temp != null) { i++; temp = temp.next; } return i; } //display the content of the list public void PrintList() { Node temp = new Node(); temp = this.head; if(temp != null) { Console.Write("The list contains: "); while(temp != null) { Console.Write(temp.data + " "); temp = temp.next; } Console.WriteLine(); } else { Console.WriteLine("The list is empty."); } } }; // test the code class Implementation { static void Main(string[] args) { LinkedList MyList = new LinkedList(); //Add four elements in the list. MyList.push_back(10); MyList.push_back(20); MyList.push_back(30); MyList.push_back(40); //Display the content of the list. MyList.PrintList(); //number of nodes in the list Console.Write("No. of nodes: "+ MyList.countNodes()); } }
The above code will give the following output:
The list contains: 10 20 30 40 No. of nodes: 4
<?php //node structure class Node { public $data; public $next; public $prev; } class LinkedList { public $head; public function __construct(){ $this->head = null; } //Add new element at the end of the list public function push_back($newElement) { $newNode = new Node(); $newNode->data = $newElement; $newNode->next = null; $newNode->prev = null; if($this->head == null) { $this->head = $newNode; } else { $temp = new Node(); $temp = $this->head; while($temp->next != null) { $temp = $temp->next; } $temp->next = $newNode; $newNode->prev = $temp; } } //count nodes in the list public function countNodes() { $temp = new Node(); $temp = $this->head; $i = 0; while($temp != null) { $i++; $temp = $temp->next; } return $i; } //display the content of the list public function PrintList() { $temp = new Node(); $temp = $this->head; if($temp != null) { echo "The list contains: "; while($temp != null) { echo $temp->data." "; $temp = $temp->next; } echo "\n"; } else { echo "The list is empty.\n"; } } }; // test the code $MyList = new LinkedList(); //Add four elements in the list. $MyList->push_back(10); $MyList->push_back(20); $MyList->push_back(30); $MyList->push_back(40); //Display the content of the list. $MyList->PrintList(); //number of nodes in the list echo "No. of nodes: ".$MyList->countNodes(); ?>
The above code will give the following output:
The list contains: 10 20 30 40 No. of nodes: 4