📅  最后修改于: 2023-12-03 15:21:34.225000             🧑  作者: Mango
链表是一种常用的数据结构,其具有插入和删除元素很方便的特点。在Java中,我们可以使用LinkedList类来实现一个链表。本文将介绍如何使用Java语言实现两个链表的并集和交集。
在Java语言中,我们可以使用LinkedList类来实现一个单向链表。示例代码如下:
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
其中,ListNode类表示链表节点的定义,包含一个整数类型的val成员以及一个指向下一个节点的指针next。
我们还需要定义一个LinkedList类来表示一个完整的链表,示例代码如下:
public class LinkedList {
ListNode head;
// 在链表尾部插入一个节点
public void add(int val){
ListNode newNode = new ListNode(val);
if(head == null){
head = newNode;
return;
}
ListNode curr = head;
while (curr.next != null){
curr = curr.next;
}
curr.next = newNode;
}
}
其中,head表示链表的头节点,add方法用于向链表中插入一个节点。
在实现链表的并集和交集之前,我们需要先实现两个链表的求交集。
链表的求交集可以通过遍历两个链表,将它们的元素逐一比较来实现。示例代码如下:
public static LinkedList intersect(LinkedList list1, LinkedList list2){
LinkedList result = new LinkedList();
ListNode curr1 = list1.head;
while (curr1 != null){
ListNode curr2 = list2.head;
while (curr2 != null){
if(curr1.val == curr2.val){
result.add(curr1.val);
break;
}
curr2 = curr2.next;
}
curr1 = curr1.next;
}
return result;
}
其中,intersect方法用于求两个链表的交集,返回一个LinkedList类型的结果。
链表的求并集可以通过遍历两个链表,将它们的元素逐一比较来实现。示例代码如下:
public static LinkedList union(LinkedList list1, LinkedList list2){
LinkedList result = new LinkedList();
ListNode curr1 = list1.head;
while (curr1 != null){
result.add(curr1.val);
curr1 = curr1.next;
}
ListNode curr2 = list2.head;
while (curr2 != null){
boolean isExist = false;
ListNode curr = result.head;
while (curr != null){
if(curr.val == curr2.val){
isExist = true;
break;
}
curr = curr.next;
}
if(!isExist){
result.add(curr2.val);
}
curr2 = curr2.next;
}
return result;
}
其中,union方法用于求两个链表的并集,返回一个LinkedList类型的结果。
完整的Java代码如下:
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public class LinkedList {
ListNode head;
// 在链表尾部插入一个节点
public void add(int val){
ListNode newNode = new ListNode(val);
if(head == null){
head = newNode;
return;
}
ListNode curr = head;
while (curr.next != null){
curr = curr.next;
}
curr.next = newNode;
}
// 链表求交集
public static LinkedList intersect(LinkedList list1, LinkedList list2){
LinkedList result = new LinkedList();
ListNode curr1 = list1.head;
while (curr1 != null){
ListNode curr2 = list2.head;
while (curr2 != null){
if(curr1.val == curr2.val){
result.add(curr1.val);
break;
}
curr2 = curr2.next;
}
curr1 = curr1.next;
}
return result;
}
// 链表求并集
public static LinkedList union(LinkedList list1, LinkedList list2){
LinkedList result = new LinkedList();
ListNode curr1 = list1.head;
while (curr1 != null){
result.add(curr1.val);
curr1 = curr1.next;
}
ListNode curr2 = list2.head;
while (curr2 != null){
boolean isExist = false;
ListNode curr = result.head;
while (curr != null){
if(curr.val == curr2.val){
isExist = true;
break;
}
curr = curr.next;
}
if(!isExist){
result.add(curr2.val);
}
curr2 = curr2.next;
}
return result;
}
}
本文介绍了如何使用Java语言实现两个链表的并集和交集。使用链表可以很方便地实现算法,同时也能展示Java语言的面向对象的特点。