📜  检查单向链表是否为回文的Java程序(1)

📅  最后修改于: 2023-12-03 15:10:52.293000             🧑  作者: Mango

Java程序:检查单向链表是否为回文

在单向链表中,回文是指链表中的节点按照相反的顺序看是相同的。现在,我们来实现一个Java程序,用来检查一个单向链表是否为回文。

思路

首先,我们需要明确回文的定义,即一个单向链表是否为回文,取决于其正序和逆序遍历的结果是否相同。因此,我们可以采取以下步骤:

  1. 遍历一次链表,将每个节点的值存储在一个数组中。
  2. 利用双指针的思想,判断数组正序和逆序遍历的结果是否相同。
代码实现

下面是检查单向链表是否为回文的Java程序的代码实现:

public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

public boolean isPalindrome(ListNode head) {
    List<Integer> nodeList = new ArrayList<>();
    while (head != null) {
        nodeList.add(head.val);
        head = head.next;
    }
    int i = 0, j = nodeList.size() - 1;
    while (i < j) {
        if (!Objects.equals(nodeList.get(i++), nodeList.get(j--))) {
            return false;
        }
    }
    return true;
}

程序中定义了一个ListNode节点类,表示链表中的每个节点。isPalindrome方法接受一个ListNode参数,表示链表的头节点,返回一个布尔值表示该链表是否为回文。

代码中首先创建了一个ArrayList,用于存储链表中每个节点的值。然后,通过循环遍历链表,将每个节点的值添加到数组中。

接下来,利用双指针的思想判断数组正序和逆序遍历的结果是否相同。具体实现方式是,设两个指针ij,分别指向数组的头部和尾部。每次将i向右移动一位,j向左移动一位,同时判断此时的ij所指向的元素是否相同。如果发现有不同的元素,则不是回文,返回false。如果ij指向的元素都相同,则继续比较下一对元素。如果最终的结果是i >= j,则表示正序和逆序遍历的结果相同,该链表为回文,返回true

总结

本文介绍了检查单向链表是否为回文的Java程序,该程序通过遍历链表并将每个节点的值存储到数组中,然后通过双指针的方式判断数组正序和逆序遍历的结果是否相同,以确定该链表是否为回文。这是目前比较简单有效的判断单向链表是否为回文的方法。