确定单向链表是否为回文串的程序2025年3月17日 | 阅读11分钟 说明在此程序中,我们需要检查给定的单链表是否为回文。回文列表是指与其反转列表等价的列表。  上面图示中的列表是回文列表,因为它与其反转列表等价,即 1, 2, 3, 2, 1。要检查列表是否为回文,我们遍历该列表,并检查从前半部分开始的任何元素是否与从后半部分开始的任何元素不匹配,然后我们将标志变量设置为 false 并中断循环。 最后,如果 flag 为 false,则列表是回文,否则不是。检查列表是否为回文的算法如下。 算法- 创建一个名为 Node 的类,它有两个属性:data 和 next。Next 是指向链表中下一个节点的指针。
- 创建另一个类 Palindrome,它具有三个属性:head、tail 和 size。
- addNode() 将向列表添加一个新节点
- 创建一个新节点。
- 它首先检查 head 是否等于 null,这意味着列表为空。
- 如果列表为空,则 head 和 tail 都将指向新添加的节点。
- 如果列表不为空,新节点将添加到列表末尾,使得 tail 的 next 指向新添加的节点。此新节点将成为列表的新 tail。
- reverseList() 将反转列表中节点的顺序
- Node current 将表示需要反转列表的节点。
- Node prevNode 表示 current 的前一个节点,nextNode 表示 current 的后一个节点。
- 通过交换每个节点的 prevNode 和 nextNode 来反转列表。
- isPalindrome() 将检查给定的列表是否为回文
- 声明一个 current 节点,它将最初指向 head 节点。
- 变量 flag 将存储布尔值 true。
- 通过将列表大小除以 2 来计算列表的中间点。
- 遍历列表,直到 current 指向中间节点。
- 使用 reverseList() 反转中间节点之后的列表直到最后一个节点。此列表将是列表的第二部分。
- 现在,比较列表前半部分和后半部分的节点。
- 如果任何节点不匹配,则将 flag 设置为 false 并中断循环。
- 如果循环结束后 flag 为 true,则表示列表是回文。
- 如果 flag 为 false,则列表不是回文。
- display() 将显示列表中存在的节点
- 定义一个节点 current,它最初将指向列表的 head。
- 遍历列表直到 current 指向 null。
- 通过使 current 在每次迭代中指向它的下一个节点来显示每个节点。
解决方案Python输出 Nodes of the singly linked list:
1 2 3 2 1
Given singly linked list is a palindrome
C输出 Nodes of the singly linked list:
1 2 3 2 1
Given singly linked list is a palindrome
JAVA输出 Nodes of singly linked list:
1 2 3 2 1
Given singly linked list is a palindrome
C#输出 Nodes of singly linked list:
1 2 3 2 1
Given singly linked list is a palindrome
PHP输出 Nodes of singly linked list:
1 2 3 2 1
Given singly linked list is a palindrome
|