Open In App

Reverse each word in a linked list node

Last Updated : 04 Aug, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

Given a linked list of strings, we need to reverse each word of the string in the given linked list.

Examples: 

Input: geeksforgeeks a computer science portal for geeks 
Output: skeegrofskeeg a retupmoc ecneics latrop rof skeeg

Input: Publish your own articles on geeksforgeeks
Output: hsilbuP ruoy nwo selcitra no skeegrofskeeg 

Using a loop iterate the list till null and take string from each node and reverse the string. 

Implementation:

C++
// C++ program to reverse each word
// in a linked list
#include <bits/stdc++.h>
using namespace std;

// Linked list Node structure
struct Node {
    string c;
    struct Node* next;
};

// Function to create newNode
// in a linked list
struct Node* newNode(string c)
{
    Node* temp = new Node;
    temp->c = c;
    temp->next = NULL;
    return temp;
};

// reverse each node data
void reverse_word(string& str)
{
    reverse(str.begin(), str.end());
}

void reverse(struct Node* head)
{
    struct Node* ptr = head;

    // iterate each node and call reverse_word
    // for each node data
    while (ptr != NULL) {
        reverse_word(ptr->c);
        ptr = ptr->next;
    }
}

// printing linked list
void printList(struct Node* head)
{
    while (head != NULL) {
        cout << head->c << " ";
        head = head->next;
    }
}

// Driver program
int main()
{
    Node* head = newNode("Geeksforgeeks");
    head->next = newNode("a");
    head->next->next = newNode("computer");
    head->next->next->next = newNode("science");
    head->next->next->next->next = newNode("portal");
    head->next->next->next->next->next = newNode("for");
    head->next->next->next->next->next->next = newNode("geeks");

    cout << "List before reverse: \n";
    printList(head);

    reverse(head);

    cout << "\n\nList after reverse: \n";
    printList(head);

    return 0;
}
Java
// Java program to reverse each word 
// in a linked list 
class GFG
{

// Linked list Node ure 
static class Node
{ 
    String c; 
    Node next; 
}; 

// Function to create newNode 
// in a linked list 
static Node newNode(String c) 
{ 
    Node temp = new Node(); 
    temp.c = c; 
    temp.next = null; 
    return temp; 
}; 

// reverse each node data 
static String reverse_word(String str) 
{ 
    String s = "";
    for(int i = 0; i < str.length(); i++)
    s = str.charAt(i) + s;
    return s;
} 

static Node reverse( Node head) 
{ 
    Node ptr = head; 

    // iterate each node and call reverse_word 
    // for each node data 
    while (ptr != null)
    { 
        ptr.c = reverse_word(ptr.c); 
        ptr = ptr.next; 
    } 
    return head;
} 

// printing linked list 
static void printList( Node head) 
{ 
    while (head != null)
    { 
        System.out.print( head.c + " "); 
        head = head.next; 
    } 
} 

// Driver program 
public static void main(String args[])
{ 
    Node head = newNode("Geeksforgeeks"); 
    head.next = newNode("a"); 
    head.next.next = newNode("computer"); 
    head.next.next.next = newNode("science"); 
    head.next.next.next.next = newNode("portal"); 
    head.next.next.next.next.next = newNode("for"); 
    head.next.next.next.next.next.next = newNode("geeks"); 

    System.out.print( "List before reverse: \n"); 
    printList(head); 

    head = reverse(head); 

    System.out.print( "\n\nList after reverse: \n"); 
    printList(head); 

} 
}

// This code is contributed by Arnab Kundu
Python3
# Python3 program to reverse each word 
# in a linked list 

# Node of a linked list 
class Node: 
    def __init__(self, next = None, data = None): 
        self.next = next
        self.data = data 

# Function to create newNode 
# in a linked list 
def newNode(c) :

    temp = Node() 
    temp.c = c 
    temp.next = None
    return temp 

# reverse each node data 
def reverse_word(str) :
    s = ""
    i = 0
    while(i < len(str) ):
        s = str[i] + s
        i = i + 1
    return s

def reverse( head) :
    ptr = head 

    # iterate each node and call reverse_word 
    # for each node data 
    while (ptr != None):
        ptr.c = reverse_word(ptr.c) 
        ptr = ptr.next
    
    return head

# printing linked list 
def printList( head) :

    while (head != None):
        print( head.c ,end = " ") 
        head = head.next
    
# Driver program 
head = newNode("Geeksforgeeks") 
head.next = newNode("a") 
head.next.next = newNode("computer") 
head.next.next.next = newNode("science") 
head.next.next.next.next = newNode("portal") 
head.next.next.next.next.next = newNode("for") 
head.next.next.next.next.next.next = newNode("geeks") 

print( "List before reverse: ") 
printList(head) 

head = reverse(head) 

print( "\n\nList after reverse: ") 
printList(head) 

# This code is contributed by Arnab Kundu
C#
// C# program to reverse each word 
// in a linked list
using System;

class GFG 
{ 
    
    // Linked list Node ure 
    public class Node 
    { 
        public String c; 
        public Node next; 
    }; 
    
    // Function to create newNode 
    // in a linked list 
    static Node newNode(String c) 
    { 
        Node temp = new Node(); 
        temp.c = c; 
        temp.next = null; 
        return temp; 
    } 
    
    // reverse each node data 
    static String reverse_word(String str) 
    { 
        String s = ""; 
        for(int i = 0; i < str.Length; i++) 
            s = str[i] + s; 
        return s; 
    } 
    
    static Node reverse( Node head) 
    { 
        Node ptr = head; 
    
        // iterate each node and call reverse_word 
        // for each node data 
        while (ptr != null) 
        { 
            ptr.c = reverse_word(ptr.c); 
            ptr = ptr.next; 
        } 
        return head; 
    } 
    
    // printing linked list 
    static void printList( Node head) 
    { 
        while (head != null) 
        { 
            Console.Write( head.c + " "); 
            head = head.next; 
        } 
    } 
    
    // Driver program 
    public static void Main(String []args) 
    { 
        Node head = newNode("Geeksforgeeks"); 
        head.next = newNode("a"); 
        head.next.next = newNode("computer"); 
        head.next.next.next = newNode("science"); 
        head.next.next.next.next = newNode("portal"); 
        head.next.next.next.next.next = newNode("for"); 
        head.next.next.next.next.next.next = newNode("geeks"); 
    
        Console.Write( "List before reverse: \n"); 
        printList(head); 
    
        head = reverse(head); 
    
        Console.Write( "\n\nList after reverse: \n"); 
        printList(head); 
    
    } 
} 

// This code contributed by Rajput-Ji
JavaScript
<script>

// JavaScript program to reverse each word 
// in a linked list

// Linked list Node ure 
class Node 
{ 
    constructor()
    {
        this.c = "";
        this.next = null;
    }
}; 

// Function to create newNode 
// in a linked list 
function newNode(c) 
{ 
    var temp = new Node(); 
    temp.c = c; 
    temp.next = null; 
    return temp; 
} 

// reverse each node data 
function reverse_word(str) 
{ 
    var s = ""; 
    for(var i = 0; i < str.length; i++) 
        s = str[i] + s; 
    return s; 
} 

function reverse(head) 
{ 
    var ptr = head; 

    // iterate each node and call reverse_word 
    // for each node data 
    while (ptr != null) 
    { 
        ptr.c = reverse_word(ptr.c); 
        ptr = ptr.next; 
    } 
    return head; 
} 

// printing linked list 
function printList( head) 
{ 
    while (head != null) 
    { 
        document.write( head.c + " "); 
        head = head.next; 
    } 
} 

// Driver program 
var head = newNode("Geeksforgeeks"); 
head.next = newNode("a"); 
head.next.next = newNode("computer"); 
head.next.next.next = newNode("science"); 
head.next.next.next.next = newNode("portal"); 
head.next.next.next.next.next = newNode("for"); 
head.next.next.next.next.next.next = newNode("geeks"); 
document.write( "List before reverse: <br>"); 
printList(head); 
head = reverse(head); 
document.write( "<br><br>List after reverse: <br>"); 
printList(head); 

</script> 

Output: 
List before reverse: 
Geeksforgeeks a computer science portal for geeks 

List after reverse: 
skeegrofskeeG a retupmoc ecneics latrop rof skeeg

 

Time complexity : O(n) 
Auxiliary Space : O(1)


Next Article
Article Tags :
Practice Tags :

Similar Reads