📌  相关文章
📜  检查字符串的链表是否形成回文

📅  最后修改于: 2022-05-13 01:57:43.842000             🧑  作者: Mango

检查字符串的链表是否形成回文

给定一个处理字符串数据的链表,检查数据是否是回文?
例如,

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++
// Program to check if a given linked list of strings
// form a palindrome
#include 
using namespace std;
  
/* Link list node */
struct Node
{
    string data;
    Node* next;
};
  
// A utility function to check if str is palindrome
// or not
bool isPalindromeUtil(string str)
{
    int length = str.length();
  
    // Match characters from beginning and
    // end.
    for (int i=0; idata);
        node = node->next;
    }
  
    // Check if the formed string is palindrome
    return isPalindromeUtil(str);
}
  
// A utility function to print a given linked list
void printList(Node *node)
{
    while (node != NULL)
    {
        cout << node->data << " -> ";
        node = node->next;
    }
    printf("NULL\n");
}
  
/* Function to create a new node with given data */
Node *newNode(const char *str)
{
    Node *new_node = new Node;
    new_node->data = str;
    new_node->next = NULL;
    return new_node;
}
  
/* Driver program to test above function*/
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
// Java Program to check if a given linked list of strings
// form a palindrome
  
import java.util.Scanner;
  
// Linked List node
class Node
{
    String data;
    Node next;
  
    Node(String d)
    {
        data = d;
        next = null;
    }
}
  
class LinkedList_Palindrome
{
    Node head;
  
    // A utility function to check if str is palindrome
    // or not
    boolean isPalidromeUtil(String str)
    {
        int length = str.length();
  
        // Match characters from beginning and
        // end.
        for (int i=0; i


Python
# Python program to check if given linked list of 
# strings form a palindrome
  
# Node class 
class Node:
  
    # Constructor to initialize the node object
    def __init__(self, data):
        self.data = data
        self.next = None
  
class LinkedList:
  
    # Function to initialize head
    def __init__(self):
        self.head = None
  
    # A utility function to check if str is palindrome
    # or not
    def isPalindromeUtil(self, string):
        return (string == string[::-1])
  
    # Returns true if string formed by linked list is 
    # palindrome
    def isPalindrome(self):
        node = self.head
  
        # Append all nodes to form a string 
        temp = []
        while (node is not None):
            temp.append(node.data)
            node = node.next
        string = "".join(temp)
        return self.isPalindromeUtil(string)
  
    # Utility function to print the linked LinkedList
    def printList(self):
        temp = self.head
        while (temp):
            print temp.data,
            temp = temp.next
  
  
# Driver program to test above function
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"
  
# This code is contributed by Nikhil Kumar Singh(nickzuck_007)


C#
// C# Program to check if a given linked list 
// of strings form a palindrome 
using System;
  
// Linked List node 
class Node 
{ 
    public String data; 
    public Node next; 
  
    public Node(String d) 
    { 
        data = d; 
        next = null; 
    } 
} 
  
public class LinkedList_Palindrome 
{ 
    Node head; 
  
    // A utility function to check if 
    // str is palindrome or not 
    bool isPalidromeUtil(String str) 
    { 
        int length = str.Length; 
  
        // Match characters from beginning and 
        // end. 
        for (int i = 0; i < length / 2; i++) 
            if (str[i] != str[length - i - 1]) 
                return false; 
  
        return true; 
    } 
  
    // Returns true if string formed by linked 
    // list is palindrome 
    bool isPalindrome() 
    { 
        Node node = head; 
  
        // Append all nodes to form a string 
        String str = ""; 
        while (node != null) 
        { 
            str = str+(node.data); 
            node = node.next; 
        } 
  
        // Check if the formed string is palindrome 
        return isPalidromeUtil(str); 
    } 
  
    /* Driver code*/
    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()); 
    } 
} 
  
// This code has been contributed
// by PrinciRaj1992



输出:
true

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程