📜  Java程序检查两个链表是否相同(1)

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

Java程序检查两个链表是否相同

在Java中,我们经常需要处理链表,而检查两个链表是否相同也是一个非常基本的需求。本文将介绍如何在Java中实现链表的比较,并给出代码示例。

链表的数据结构表示

在Java中,可以使用节点类来表示链表的每一个结点。节点包含两个属性:元素值和指向下一个节点的指针。

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) {
        val = x;
        next = null;
    }
}
链表的比较方法

链表的比较可以采用递归或者迭代的方法。递归方法的思路是先比较当前节点的值是否相等,再比较下一个节点。如果存在任何一个节点的值不相等,那么两个链表就不相同了。迭代方法的思路是同时遍历两个链表,比较每一个节点的值是否相等。如果存在任何一个节点的值不相等,那么两个链表就不相同了。

递归方法实现代码
public boolean isSameList(ListNode l1, ListNode l2) {
    if (l1 == null && l2 == null) {
        return true;
    } else if (l1 == null || l2 == null) {
        return false;
    } else if (l1.val != l2.val) {
        return false;
    } else {
        return isSameList(l1.next, l2.next);
    }
}
迭代方法实现代码
public boolean isSameList(ListNode l1, ListNode l2) {
    while (l1 != null && l2 != null) {
        if (l1.val != l2.val) {
            return false;
        }
        l1 = l1.next;
        l2 = l2.next;
    }
    return l1 == null && l2 == null;
}
示例
ListNode l1 = new ListNode(1);
l1.next = new ListNode(2);
l1.next.next = new ListNode(3);

ListNode l2 = new ListNode(1);
l2.next = new ListNode(2);
l2.next.next = new ListNode(3);

Solution solution = new Solution();
boolean result1 = solution.isSameList(l1, l2); // 返回 true
boolean result2 = solution.isSameList(l1, null); // 返回 false
boolean result3 = solution.isSameList(new ListNode(1), new ListNode(2)); // 返回 false
总结

Java中比较两个链表是否相同可以采用递归或者迭代方法。递归方法需要递归遍历链表,迭代方法需要同时遍历两个链表。无论采用哪种方法,都需要注意空指针异常的处理。