C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Program to create a singly linked list of n nodes and display it in reverse orderExplanationIn this program, we need to create a singly linked list and display the list in reverse order. Original List ![]() Reversed List ![]() One of the approaches to solving this problem is to reach the end the of the list and display the nodes from tail to head recursively. Algorithm
SolutionPython#Represent a node of the singly linked list class Node: def __init__(self,data): self.data = data; self.next = None; class ReverseList: #Represent the head and tail of the singly linked list def __init__(self): self.head = None; self.tail = None; #addNode() will add a new node to the list def addNode(self, data): #Create a new node newNode = Node(data); #Checks if the list is empty if(self.head == None): #If list is empty, both head and tail will point to new node self.head = newNode; self.tail = newNode; else: #newNode will be added after tail such that tail's next will point to newNode self.tail.next = newNode; #newNode will become new tail of the list self.tail = newNode; #reverse() will the reverse the order of the list def reverse(self, current): #Checks if list is empty if(self.head == None): print("List is empty"); return; else: #Checks if the next node is None, if yes then prints it. if(current.next == None): print(current.data ,end=" "); return; #Recursively calls the reverse function self.reverse(current.next); print(current.data ,end=" "); #display() will display all the nodes present in the list def display(self): #Node current will point to head current = self.head; if(self.head == None): print("List is empty"); return; while(current != None): #Prints each node by incrementing pointer print(current.data , end=" "); current = current.next; print(); sList = ReverseList(); #Add nodes to the list sList.addNode(1); sList.addNode(2); sList.addNode(3); sList.addNode(4); print("Original List: "); sList.display(); print("Reversed List: "); #Print reversed list sList.reverse(sList.head); Output: Original List: 1 2 3 4 Reversed List: 4 3 2 1 C#include <stdio.h> //Represent a node of the singly linked list struct node{ int data; struct node *next; }; //Represent the head and tail of the singly linked list struct node *head, *tail = NULL; //addNode() will add a new node to the list void addNode(int data) { //Create a new node struct node *newNode = (struct node*)malloc(sizeof(struct node)); newNode->data = data; newNode->next = NULL; //Checks if the list is empty if(head == NULL) { //If list is empty, both head and tail will point to new node head = newNode; tail = newNode; } else { //newNode will be added after tail such that tail's next will point to newNode tail->next = newNode; //newNode will become new tail of the list tail = newNode; } } //reverse() will the reverse the order of the list void reverse(struct node *current) { //Checks if list is empty if(head == NULL) { printf("List is empty\n"); return; } else{ //Checks if the next node is null, if yes then prints it. if(current->next == NULL) { printf("%d ", current->data); return; } //Recursively calls the reverse function reverse(current->next); printf("%d ", current->data); } } //display() will display all the nodes present in the list void display() { //Node current will point to head struct node *current = head; if(head == NULL) { printf("List is empty\n"); return; } while(current != NULL) { //Prints each node by incrementing pointer printf("%d ", current->data); current = current->next; } printf("\n"); } int main() { //Add nodes to the list addNode(1); addNode(2); addNode(3); addNode(4); printf("Original List: \n"); display(); printf("Reversed List: \n"); //Print reversed list reverse(head); return 0; } Output: Original List: 1 2 3 4 Reversed List: 4 3 2 1 JAVApublic class ReverseList { //Represent a node of the singly linked list class Node{ int data; Node next; public Node(int data) { this.data = data; this.next = null; } } //Represent the head and tail of the singly linked list public Node head = null; public Node tail = null; //addNode() will add a new node to the list public void addNode(int data) { //Create a new node Node newNode = new Node(data); //Checks if the list is empty if(head == null) { //If list is empty, both head and tail will point to new node head = newNode; tail = newNode; } else { //newNode will be added after tail such that tail's next will point to newNode tail.next = newNode; //newNode will become new tail of the list tail = newNode; } } //reverse() will help the reverse the order of the list public void reverse(Node current) { //Checks if list is empty if(head == null) { System.out.println("List is empty"); return; } else { //Checks if the next node is null, if yes then prints it. if(current.next == null) { System.out.print(current.data + " "); return; } //Recursively calls the reverse function reverse(current.next); System.out.print(current.data + " "); } } //display() will display all the nodes present in the list public void display() { //Node current will point to head Node current = head; if(head == null) { System.out.println("List is empty"); return; } while(current != null) { //Prints each node by incrementing pointer System.out.print(current.data + " "); current = current.next; } System.out.println(); } public static void main(String[] args) { ReverseList sList = new ReverseList(); //Add nodes to the list sList.addNode(1); sList.addNode(2); sList.addNode(3); sList.addNode(4); System.out.println("Original List: "); sList.display(); System.out.println("Reversed List: "); //Print reversed list sList.reverse(sList.head); } } Output: Original List: 1 2 3 4 Reversed List: 4 3 2 1 C#using System; public class ReverseList { //Represent a node of the singly linked list public class Node<T>{ public T data; public Node<T> next; public Node(T value) { data = value; next = null; } } public class SinglyLinkedList<T>{ //Represent the head and tail of the singly linked list public Node<T> head = null; public Node<T> tail = null; //addNode() will add a new node to the list public void addNode(T data) { //Create a new node Node<T> newNode = new Node<T>(data); //Checks if the list is empty if(head == null) { //If list is empty, both head and tail will point to new node head = newNode; tail = newNode; } else { //newNode will be added after tail such that tail's next will point to newNode tail.next = newNode; //newNode will become new tail of the list tail = newNode; } } //reverse() will the reverse the order of the list public void reverse(Node<T> current) { //Checks if list is empty if(head == null) { Console.WriteLine("List is empty"); return; } else{ //Checks if the next node is null, if yes then prints it. if(current.next == null) { Console.Write(current.data + " "); return; } //Recursively calls the reverse function reverse(current.next); Console.Write(current.data + " "); } } //display() will display all the nodes present in the list public void display() { //Node current will point to head Node<T> current = head; if(head == null) { Console.WriteLine("List is empty"); return; } while(current != null) { //Prints each node by incrementing pointer Console.Write(current.data + " "); current = current.next; } Console.WriteLine(); } } public static void Main() { SinglyLinkedList<int> sList = new SinglyLinkedList<int>(); //Add nodes to the list sList.addNode(1); sList.addNode(2); sList.addNode(3); sList.addNode(4); Console.WriteLine("Original List: "); sList.display(); Console.WriteLine("Reversed List: "); //Print reversed list sList.reverse(sList.head); } } Output: Original List: 1 2 3 4 Reversed List: 4 3 2 1 PHP<!DOCTYPE html> <html> <body> <?php //Represent a node of singly linked list class Node{ public $data; public $next; function __construct($data){ $this->data = $data; $this->next = NULL; } } class ReverseList{ //Represent the head and tail of the singly linked list public $head; public $tail; function __construct(){ $this->head = NULL; $this->tail = NULL; } //addNode() will add a new node to the list function addNode($data) { //Create a new node $newNode = new Node($data); //Checks if the list is empty if($this->head == NULL) { //If list is empty, both head and tail will point to new node $this->head = $newNode; $this->tail = $newNode; } else { //newNode will be added after tail such that tail's next will point to newNode $this->tail->next = $newNode; //newNode will become new tail of the list $this->tail = $newNode; } } //reverse() will the reverse the order of the list function reverse($current) { //Checks if list is empty if($this->head == NULL) { print("List is empty <br>"); return; } else{ //Checks if the next node is null, if yes then prints it. if($current->next == NULL) { print($current->data . " "); return; } //Recursively calls the reverse function $this->reverse($current->next); print($current->data . " "); } } //display() will display all the nodes present in the list function display() { //Node current will point to head $current = $this->head; if($this->head == NULL) { print("List is empty <br>"); return; } while($current != NULL) { //Prints each node by incrementing pointer print($current->data . " "); $current = $current->next; } print("<br>"); } } $sList = new ReverseList(); //Add nodes to the list $sList->addNode(1); $sList->addNode(2); $sList->addNode(3); $sList->addNode(4); print("Original List: <br>"); $sList->display(); print("Reversed List: <br>"); //Print reversed list $sList->reverse($sList->head); ?> </body> </html> Output: Original List: 1 2 3 4 Reversed List: 4 3 2 1
Next Topic#
|