Рубрики

Проверьте, образует ли связанный список строк палиндром

При наличии связанного списка, обрабатывающего строковые данные, проверьте, являются ли данные палиндромом или нет?
Например,

Input  : a -> bc -> d -> dcb -> a -> NULL
Output : True
String "abcddcba" is palindrome.

Output : a -> bc -> d -> ba -> NULL
Output : False
String "abcdba" is not palindrome. 

Идея очень проста. Создайте строку из заданного связанного списка и проверьте, является ли созданная строка палиндромной или нет.

C / C ++

// Программа для проверки наличия заданного связанного списка строк
// формируем палиндром
#include <bits/stdc++.h>

using namespace std;

  
/ * Узел списка ссылок * /

struct Node

{

    string data;

    Node* next;

};

  
// Утилита для проверки, является ли str палиндромом
// или не

bool isPalindromeUtil(string str)

{

    int length = str.length();

  

    // Подходим символы от начала и до

    // конец.

    for (int i=0; i<length/2; i++)

        if (str[i] != str[length-i-1])

            return false;

  

    return true;

}

  
// Возвращает true, если строка сформирована связным
// список палиндром

bool isPalindrome(Node *node)

{

    // Добавить все узлы для формирования строки

    string str = "";

    while (node != NULL)

    {

        str.append(node->data);

        node = node->next;

    }

  

    // Проверяем, является ли сформированная строка палиндромной

    return isPalindromeUtil(str);

}

  
// Утилита для печати заданного связанного списка

void printList(Node *node)

{

    while (node != NULL)

    {

        cout << node->data << " -> ";

        node = node->next;

    }

    printf("NULL\n");

}

  
/ * Функция для создания нового узла с заданными данными * /

Node *newNode(const char *str)

{

    Node *new_node = new Node;

    new_node->data = str;

    new_node->next = NULL;

    return new_node;

}

  
/ * Программа драйвера для проверки вышеуказанной функции * /

int main()

{

    Node *head = newNode("a");

    head->next = newNode("bc");

    head->next->next = newNode("d");

    head->next->next->next = newNode("dcb");

    head->next->next->next->next = newNode("a");

  

    isPalindrome(head)? printf("true\n"):

                        printf("false\n");

  

    return 0;

}

Джава

// Java-программа для проверки наличия заданного связанного списка строк
// формируем палиндром

  

import java.util.Scanner;

  
// узел связанного списка

class Node

{

    String data;

    Node next;

  

    Node(String d)

    {

        data = d;

        next = null;

    }

}

  

class LinkedList_Palindrome

{

    Node head;

  

    // Утилита для проверки, является ли str палиндромом

    // или не

    boolean isPalidromeUtil(String str)

    {

        int length = str.length();

  

        // Подходим символы от начала и до

        // конец.

        for (int i=0; i<length/2; i++)

            if (str.charAt(i) != str.charAt(length-i-1))

                return false;

  

        return true;

    }

  

    // Возвращает true, если строка сформирована связным

    // список палиндром

    boolean isPalindrome()

    {

        Node node = head;

  

        // Добавить все узлы для формирования строки

        String str = "";

        while (node != null)

        {

            str = str.concat(node.data);

            node = node.next;

        }

  

        // Проверяем, является ли сформированная строка палиндромной

        return isPalidromeUtil(str);

    }

  

    / * Программа драйвера для проверки вышеуказанной функции * /

    public static void main(String[] args)

    {

        LinkedList_Palindrome list = new LinkedList_Palindrome();

        list.head = new Node("a");

        list.head.next = new Node("bc");

        list.head.next.next = new Node("d");

        list.head.next.next.next = new Node("dcb");

        list.head.next.next.next.next = new Node("a");

  

        System.out.println(list.isPalindrome());

  

    }

}
// Этот код предоставлен Амитом Хандельвалом

питон

# Программа Python для проверки, если задан связанный список
# строки образуют палиндром

  
# Класс узла

class Node:

  

    # Конструктор для инициализации объекта узла

    def __init__(self, data):

        self.data = data

        self.next = None

  

class LinkedList:

  

    # Функция для инициализации головы

    def __init__(self):

        self.head = None

  

    # Полезная функция для проверки, является ли str палиндромом

    # или не

    def isPalindromeUtil(self, string):

        return (string == string[::-1])

  

    # Возвращает true, если строка, сформированная связанным списком,

    # палиндром

    def isPalindrome(self):

        node = self.head

  

        # Добавить все узлы, чтобы сформировать строку

        temp = []

        while (node is not None):

            temp.append(node.data)

            node = node.next

        string = "".join(temp)

        return self.isPalindromeUtil(string)

  

    # Утилита для печати связанного LinkedList

    def printList(self):

        temp = self.head

        while (temp):

            print temp.data,

            temp = temp.next

  

  
# Программа драйвера для проверки вышеуказанной функции

llist = LinkedList()

llist.head = Node('a')

llist.head.next = Node('bc')

llist.head.next.next = Node("d")

llist.head.next.next.next = Node("dcb")

llist.head.next.next.next.next = Node("a")

print "true" if llist.isPalindrome() else "false"

  
# Этот код предоставлен Nikhil Kumar Singh (nickzuck_007)

C #

// C # Программа для проверки наличия заданного связанного списка
// из строк образуют палиндром

using System;

  
// узел связанного списка

class Node 

    public String data; 

    public Node next; 

  

    public Node(String d) 

    

        data = d; 

        next = null

    

  

public class LinkedList_Palindrome 

    Node head; 

  

    // Полезная функция для проверки

    // есть палиндром или нет

    bool isPalidromeUtil(String str) 

    

        int length = str.Length; 

  

        // Подходим символы от начала и до

        // конец.

        for (int i = 0; i < length / 2; i++) 

            if (str[i] != str[length - i - 1]) 

                return false

  

        return true

    

  

    // Возвращает true, если строка сформирована связным

    // список палиндром

    bool isPalindrome() 

    

        Node node = head; 

  

        // Добавить все узлы для формирования строки

        String str = ""

        while (node != null

        

            str = str+(node.data); 

            node = node.next; 

        

  

        // Проверяем, является ли сформированная строка палиндромной

        return isPalidromeUtil(str); 

    

  

    / * Код водителя * /

    public static void Main(String[] args) 

    

        LinkedList_Palindrome list = new LinkedList_Palindrome(); 

        list.head = new Node("a"); 

        list.head.next = new Node("bc"); 

        list.head.next.next = new Node("d"); 

        list.head.next.next.next = new Node("dcb"); 

        list.head.next.next.next.next = new Node("a"); 

  

        Console.WriteLine(list.isPalindrome()); 

    

  
// Этот код был добавлен
// by PrinciRaj1992


Выход:

Рекомендуемые посты:

Проверьте, образует ли связанный список строк палиндром

0.00 (0%) 0 votes