检查字符的双向链表是否为回文
给定一个字符的双向链表,编写一个函数,如果给定的双向链表是回文,则返回真,否则返回假。
- 创建一个双向链表,其中每个节点只包含一个字符串的字符。
- 在初始化列表的开始和就在列表的末尾留下了两个三分球。
- 检查左节点上的数据是否等于右节点。如果相等,则向左递增并向右递减直到列表的中间。如果在任何阶段不相等,则返回 false。
C++
// C++ program to check if doubly
// linked list is palindrome or not
#include
using namespace std;
// Structure of node
struct Node
{
char data;
struct Node *next;
struct Node *prev;
};
/* Given a reference (pointer to pointer) to
the head of a list and an int, inserts a
new node on the front of the list. */
void push(struct Node** head_ref, char new_data)
{
struct Node* new_node = new Node;
new_node->data = new_data;
new_node->next = (*head_ref);
new_node->prev = NULL;
if ((*head_ref) != NULL)
(*head_ref)->prev = new_node ;
(*head_ref) = new_node;
}
// Function to check if list is palindrome or not
bool isPalindrome(struct Node *left)
{
if (left == NULL)
return true;
// Find rightmost node
struct Node *right = left;
while (right->next != NULL)
right = right->next;
while (left != right)
{
if (left->data != right->data)
return false;
left = left->next;
right = right->prev;
}
return true;
}
// Driver program
int main()
{
struct Node* head = NULL;
push(&head, 'l');
push(&head, 'e');
push(&head, 'v');
push(&head, 'e');
push(&head, 'l');
if (isPalindrome(head))
printf("It is Palindrome");
else
printf("Not Palindrome");
return 0;
}
Java
// Java program to check if doubly
// linked list is palindrome or not
class GFG
{
// Structure of node
static class Node
{
char data;
Node next;
Node prev;
};
/* Given a reference (pointer to pointer) to
the head of a list and an int, inserts a
new node on the front of the list. */
static Node push(Node head_ref, char new_data)
{
Node new_node = new Node();
new_node.data = new_data;
new_node.next = head_ref;
new_node.prev = null;
if (head_ref != null)
head_ref.prev = new_node ;
head_ref = new_node;
return head_ref;
}
// Function to check if list is palindrome or not
static boolean isPalindrome(Node left)
{
if (left == null)
return true;
// Find rightmost node
Node right = left;
while (right.next != null)
right = right.next;
while (left != right)
{
if (left.data != right.data)
return false;
left = left.next;
right = right.prev;
}
return true;
}
// Driver program
public static void main(String[] args)
{
Node head = null;
head = push(head, 'l');
head = push(head, 'e');
head = push(head, 'v');
head = push(head, 'e');
head = push(head, 'l');
if (isPalindrome(head))
System.out.printf("It is Palindrome");
else
System.out.printf("Not Palindrome");
}
}
// This code is contributed by Rajput-Ji
Python3
# Python3 program to check if doubly
# linked list is a palindrome or not
class Node:
def __init__(self, data, next, prev):
self.data = data
self.next = next
self.prev = prev
# Given a reference (pointer to pointer) to
# the head of a list and an int, inserts
# a new node on the front of the list.
def push(head_ref, new_data):
new_node = Node(new_data, head_ref, None)
if head_ref != None:
head_ref.prev = new_node
head_ref = new_node
return head_ref
# Function to check if list is palindrome or not
def isPalindrome(left):
if left == None:
return True
# Find rightmost node
right = left
while right.next != None:
right = right.next
while left != right:
if left.data != right.data:
return False
left = left.next
right = right.prev
return True
# Driver program
if __name__ == "__main__":
head = None
head = push(head, 'l')
head = push(head, 'e')
head = push(head, 'v')
head = push(head, 'e')
head = push(head, 'l')
if isPalindrome(head):
print("It is Palindrome")
else:
print("Not Palindrome")
# This code is contributed by Rituraj Jain
C#
// C# program to check if doubly
// linked list is palindrome or not
using System;
class GFG
{
// Structure of node
public class Node
{
public char data;
public Node next;
public Node prev;
};
/* Given a reference (pointer to pointer) to
the head of a list and an int, inserts a
new node on the front of the list. */
static Node push(Node head_ref, char new_data)
{
Node new_node = new Node();
new_node.data = new_data;
new_node.next = head_ref;
new_node.prev = null;
if (head_ref != null)
head_ref.prev = new_node ;
head_ref = new_node;
return head_ref;
}
// Function to check if list is palindrome or not
static bool isPalindrome(Node left)
{
if (left == null)
return true;
// Find rightmost node
Node right = left;
while (right.next != null)
right = right.next;
while (left != right)
{
if (left.data != right.data)
return false;
left = left.next;
right = right.prev;
}
return true;
}
// Driver program
public static void Main(String[] args)
{
Node head = null;
head = push(head, 'l');
head = push(head, 'e');
head = push(head, 'v');
head = push(head, 'e');
head = push(head, 'l');
if (isPalindrome(head))
Console.Write("It is Palindrome");
else
Console.Write("Not Palindrome");
}
}
// This code is contributed by Rajput-Ji
Javascript
输出:
It is Palindrome
时间复杂度: O(n)
辅助空间: O(1)
相关帖子:
- 检查单向链表是否为回文的函数
- 检查字符串的链表是否形成回文
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。