📜  链接列表中所有回文数的总和

📅  最后修改于: 2021-06-29 06:00:53             🧑  作者: Mango

给定一个带有整数节点值的链表,任务是找到所有以节点值形式出现的回文数之和。
例子:

方法:为了解决此问题,我们使用一种类似的方法来计算数组中所有回文的总和。遍历链接列表的所有节点,并检查当前节点值是否是回文。如果是这样,则将值相加并存储和。所有这些值的最终总和给出了所需的答案。
下面是上述方法的实现:

C++
// C++ program to calculate
// the sum of all palindromic
// numbers in a linked list
 
#include 
using namespace std;
 
// Node of the singly
// linked list
struct Node {
    int data;
    Node* next;
};
 
// Function to insert a node at
// the beginning of the singly
// Linked List
void push(Node** head_ref, int new_data)
{
    // allocate node
    Node* new_node = (Node*)malloc(
        sizeof(struct Node));
 
    // Insert the data
    new_node->data = new_data;
 
    // Point the new Node
    // to the current head
    new_node->next = (*head_ref);
 
    // Make the new Node as
    // the new head
    (*head_ref) = new_node;
}
 
// Function to check
// if a number n is
// palindrome or not
bool isPalin(int n)
{
    int d = 0, s = 0;
    int temp = n;
    while (n > 0) {
        d = n % 10;
        s = s * 10 + d;
        n = n / 10;
    }
 
    // If n is equal to
    // the its reverse
    // it is a palindrome
    return temp == s;
}
 
// Function to calculate
// the sum of all nodes
// which are palindrome
int sumOfpal(Node* head_1)
{
    int s = 0;
    Node* ptr = head_1;
    while (ptr != NULL) {
 
        // If the value of the
        // current node is
        // a palindrome
        if (isPalin(ptr->data)) {
 
            // Add the value
            // to the sum
            s += ptr->data;
        }
        ptr = ptr->next;
    }
    return s;
}
 
// Driver Code
int main()
{
    // Create the head
    // of the linked list
    Node* head1 = NULL;
 
    // Insert nodes into
    // the linked list
    push(&head1, 13);
    push(&head1, 212);
    push(&head1, 22);
    push(&head1, 44);
    push(&head1, 4);
    push(&head1, 3);
 
    // Print the sum of all
    // palindromes
    cout << sumOfpal(head1)
         << endl;
    return 0;
}


Java
// Java program to calculate
// the sum of all palindromes
// in a linked list
 
import java.util.*;
 
class GFG {
 
    // Node of the singly
    // linked list
    static class Node {
        int data;
        Node next;
    };
 
    // Function to insert a node
    // at the beginning of the
    // singly Linked List
    static Node push(Node head_ref,
                     int new_data)
    {
        // Allocate node
        Node new_node = new Node();
 
        // Insert the data
        new_node.data = new_data;
 
        // Point the current Node
        // to the current head
        new_node.next = (head_ref);
 
        // Make the current node
        // as the new head
        (head_ref) = new_node;
 
        return head_ref;
    }
 
    // Function to check if
    // a number is palindrome
    static boolean isPalin(int n)
    {
        int d = 0, s = 0;
        int temp = n;
        while (n > 0) {
            d = n % 10;
            s = s * 10 + d;
            n = n / 10;
        }
        // If n is equal to its
        // reverse, it is a
        // palindrome
        return temp == s;
    }
 
    // Function to calculate sum
    // of all nodes with value
    // which is a palindrome
    static int sumOfpal(Node head_1)
    {
        int s = 0;
        Node ptr = head_1;
        while (ptr != null) {
            // If the value of the
            // current node
            // is a palindrome
            if (isPalin(ptr.data)) {
 
                // Add that value to
                // the sum
                s += ptr.data;
            }
            ptr = ptr.next;
        }
 
        // Return the sum
        return s;
    }
 
    // Driver Code
    public static void main(String args[])
    {
        // Create the head
        Node head1 = null;
 
        // Insert nodes to the
        // Linked List
        head1 = push(head1, 13);
        head1 = push(head1, 212);
        head1 = push(head1, 22);
        head1 = push(head1, 44);
        head1 = push(head1, 4);
        head1 = push(head1, 3);
 
        System.out.println(
            sumOfpal(head1));
    }
}


Python3
# Python3 program to
# calculate the sum of all
# palindromes present in
# a Linked List
 
class Node: 
         
    def __init__(self, data): 
        self.data = data 
        self.next = next
             
# Function to insert a
# node at the beginning 
# of the singly Linked List 
def push( head_ref, new_data) :
     
    # Allocate node 
    new_node = Node(0) 
     
    # Insert data 
    new_node.data = new_data 
     
    # Pont to the head
    new_node.next = (head_ref) 
     
    # Make the new Node
    # the new head
    (head_ref) = new_node
     
    return head_ref
 
     
# Function to check if
# a number is palindrome
def isPalin(n) :
     
    d = 0; s = 0;
    temp = n;
    while (n > 0) :
   
        d = n % 10;
        s = s * 10 + d;
        n = n // 10;
   
    # If n is equal to its reverse,
    # it is a palindrome
    return s == temp;
   
   
# Function to calculate sum of
# all elements in a Linked List
# which are palindrome
def sumOfpal(head_ref1) :
 
    s = 0;
    ptr1 = head_ref1
 
    while (ptr1 != None) :
        # If the value of the
        # current node
        # is a palindrome
        if (isPalin(ptr1.data)) :
           
            # Add that value
            s = s + ptr1.data
 
        # Move to the next node
        ptr1 = ptr1.next
 
    # Return the final sum
    return s;
     
# Driver code 
 
# Create the Head
head1 = None
 
# Insert nodes 
head1 = push(head1, 13) 
head1 = push(head1, 212) 
head1 = push(head1, 22) 
head1 = push(head1, 44) 
head1 = push(head1, 4)
head1 = push(head1, 3)
 
print(sumOfpal(head1))


C#
// C# program to calculate
// the sum of all palindromes
// in a linked list
using System;
 
class GFG {
 
// Node of the singly
// linked list
class Node
{
    public int data;
    public Node next;
};
 
// Function to insert a node
// at the beginning of the
// singly Linked List
static Node push(Node head_ref,
                 int new_data)
{
     
    // Allocate node
    Node new_node = new Node();
 
    // Insert the data
    new_node.data = new_data;
 
    // Point the current Node
    // to the current head
    new_node.next = (head_ref);
 
    // Make the current node
    // as the new head
    (head_ref) = new_node;
     
    return head_ref;
}
 
// Function to check if
// a number is palindrome
static bool isPalin(int n)
{
    int d = 0, s = 0;
    int temp = n;
     
    while (n > 0)
    {
        d = n % 10;
        s = s * 10 + d;
        n = n / 10;
    }
     
    // If n is equal to its
    // reverse, it is a
    // palindrome
    return temp == s;
}
 
// Function to calculate sum
// of all nodes with value
// which is a palindrome
static int sumOfpal(Node head_1)
{
    int s = 0;
    Node ptr = head_1;
     
    while (ptr != null)
    {
         
        // If the value of the
        // current node
        // is a palindrome
        if (isPalin(ptr.data))
        {
 
            // Add that value to
            // the sum
            s += ptr.data;
        }
        ptr = ptr.next;
    }
 
    // Return the sum
    return s;
}
 
// Driver Code
public static void Main(String []args)
{
     
    // Create the head
    Node head1 = null;
 
    // Insert nodes to the
    // Linked List
    head1 = push(head1, 13);
    head1 = push(head1, 212);
    head1 = push(head1, 22);
    head1 = push(head1, 44);
    head1 = push(head1, 4);
    head1 = push(head1, 3);
 
    Console.WriteLine(sumOfpal(head1));
}
}
 
// This code is contributed by sapnasingh4991


输出:
285