Java 判断单链表是否为回文的程序

17 Mar 2025 | 4 分钟阅读

在这个程序中,我们需要检查给定的单向链表是否是回文。回文链表是指与自身反转后相同的链表。

Java program to determine whether a singly linked list is the palindrome

上图中给出的列表是一个回文,因为它与其反转列表(即 1, 2, 3, 2, 1)相同。要检查一个列表是否是回文,我们遍历列表,检查前半部分的任何元素是否与后半部分的任何元素不匹配,如果发现不匹配,则将变量 flag 设置为 false 并跳出循环。

最后,如果 flag 为 false,则列表是回文,否则不是。检查列表是否是回文的算法如下:

算法

  • 创建一个名为 Node 的类,它有两个属性:data 和 next。Next 是指向链表中下一个节点的指针。
  • 创建另一个 Palindrome 类,该类具有三个属性:head、tail 和 size。
  • addNode() 将向列表添加一个新节点
    • 创建一个新节点。
    • 它首先检查 head 是否等于 null,这意味着列表为空。
    • 如果列表为空,则 head 和 tail 都将指向新添加的节点。
    • 如果列表不为空,新节点将添加到列表末尾,使得 tail 的 next 指向新添加的节点。此新节点将成为列表的新 tail。

a. reverseList() 将反转列表中节点的顺序。

  • 节点 current 将表示需要反转的列表中的一个节点。
  • 节点 prevNode 表示 current 的前一个节点,nextNode 表示 current 的下一个节点。
  • 通过交换每个节点的 prevNode 和 nextNode 来反转列表。

a. isPalindrome() 将检查给定列表是否是回文。

  • 声明一个节点 current,它最初将指向头节点。
  • 变量 flag 将存储布尔值 true。
  • 通过将列表大小除以 2 来计算列表的中间点。
  • 遍历列表,直到 current 指向中间节点。
  • 使用 reverseList() 反转中间节点之后直到最后一个节点的列表。此列表将是列表的后半部分。
  • 现在,比较列表前半部分和后半部分的节点。
  • 如果任何节点不匹配,则将 flag 设置为 false 并跳出循环。
  • 如果循环结束后 flag 为 true,则表示列表是回文。
  • 如果 flag 为 false,则列表不是回文。

a. display() 将显示列表中存在的节点

  • 定义一个节点 current,它最初将指向列表的 head。
  • 遍历列表直到 current 指向 null。
  • 通过使 current 在每次迭代中指向它的下一个节点来显示每个节点。

程序

输出

Nodes of singly linked list: 
1 2 3 2 1 
Given singly linked list is a palindrome
下一个主题Java 程序