📅  最后修改于: 2023-12-03 15:27:37.515000             🧑  作者: Mango
在Java中,我们可以通过链表来存储一些元素。有时候,我们需要将多个链表合并成一个链表。本次介绍如何编写Java程序,实现合并三个单链表元素的功能。
合并三个单链表可分为两个步骤:
在实现过程中,我们首先需要定义一个单链表节点类,然后定义三个单链表,最后编写合并单链表的方法。
以下是Java代码实现合并三个单链表元素的功能:
/**
* 单链表节点类
*/
class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
public class MergeLinkedLists {
/**
* 合并三个单链表
*/
public static ListNode merge(ListNode l1, ListNode l2, ListNode l3) {
ListNode p1 = l1;
ListNode p2 = l2;
ListNode p3 = l3;
// 定义新链表的头节点和尾节点
ListNode head = null;
ListNode tail = null;
while (p1 != null || p2 != null || p3 != null) {
// 找到当前链表中最小的元素
int minVal = Integer.MAX_VALUE;
if (p1 != null) minVal = Math.min(minVal, p1.val);
if (p2 != null) minVal = Math.min(minVal, p2.val);
if (p3 != null) minVal = Math.min(minVal, p3.val);
// 将最小元素添加到新链表中
ListNode node = new ListNode(minVal);
if (head == null) {
head = node;
tail = node;
} else {
tail.next = node;
tail = node;
}
// 将此时最小元素所在的链表指针往后推一位
if (p1 != null && p1.val == minVal) p1 = p1.next;
if (p2 != null && p2.val == minVal) p2 = p2.next;
if (p3 != null && p3.val == minVal) p3 = p3.next;
}
return head;
}
public static void main(String[] args) {
ListNode l1 = new ListNode(1);
l1.next = new ListNode(4);
l1.next.next = new ListNode(5);
ListNode l2 = new ListNode(1);
l2.next = new ListNode(3);
l2.next.next = new ListNode(4);
ListNode l3 = new ListNode(2);
l3.next = new ListNode(6);
ListNode result = merge(l1, l2, l3);
while (result != null) {
System.out.print(result.val + "->");
result = result.next;
}
System.out.print("null");
}
}
在上述代码中,我们定义了一个ListNode
类作为单链表节点,然后定义了一个merge
方法用于合并三个单链表。在此方法中,我们使用三个指针p1
、p2
、p3
,分别指向三个链表的头节点。同时定义一个head
和tail
变量,用于记录新链表的头节点和尾节点。
在while
循环中,我们遍历三个单链表,找到其中最小的元素,并将其添加到新链表中。最后,将存储最小元素的链表指针指向下一个节点即可。
最后,我们调用merge
方法,将三个单链表合并成一个。然后遍历这个新链表并输出,即可得到最终结果。
````java
/**
* 单链表节点类
*/
class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
public class MergeLinkedLists {
/**
* 合并三个单链表
*/
public static ListNode merge(ListNode l1, ListNode l2, ListNode l3) {
ListNode p1 = l1;
ListNode p2 = l2;
ListNode p3 = l3;
// 定义新链表的头节点和尾节点
ListNode head = null;
ListNode tail = null;
while (p1 != null || p2 != null || p3 != null) {
// 找到当前链表中最小的元素
int minVal = Integer.MAX_VALUE;
if (p1 != null) minVal = Math.min(minVal, p1.val);
if (p2 != null) minVal = Math.min(minVal, p2.val);
if (p3 != null) minVal = Math.min(minVal, p3.val);
// 将最小元素添加到新链表中
ListNode node = new ListNode(minVal);
if (head == null) {
head = node;
tail = node;
} else {
tail.next = node;
tail = node;
}
// 将此时最小元素所在的链表指针往后推一位
if (p1 != null && p1.val == minVal) p1 = p1.next;
if (p2 != null && p2.val == minVal) p2 = p2.next;
if (p3 != null && p3.val == minVal) p3 = p3.next;
}
return head;
}
public static void main(String[] args) {
ListNode l1 = new ListNode(1);
l1.next = new ListNode(4);
l1.next.next = new ListNode(5);
ListNode l2 = new ListNode(1);
l2.next = new ListNode(3);
l2.next.next = new ListNode(4);
ListNode l3 = new ListNode(2);
l3.next = new ListNode(6);
ListNode result = merge(l1, l2, l3);
while (result != null) {
System.out.print(result.val + "->");
result = result.next;
}
System.out.print("null");
}
}
以上是合并三个单链表元素的完整代码。