📅  最后修改于: 2023-12-03 15:16:38.018000             🧑  作者: Mango
在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中比较两个链表是否相同可以采用递归或者迭代方法。递归方法需要递归遍历链表,迭代方法需要同时遍历两个链表。无论采用哪种方法,都需要注意空指针异常的处理。