合并两个已排序的链表是一个常见的算法问题。以下是使用 Java 实现的示例代码。我们假设链表节点的结构如下:
class ListNode {int val;ListNode next;ListNode(int val) {this.val = val;this.next = null;}
}
接下来是合并两个排序链表的代码实现:
public class MergeSortedLists {public ListNode mergeTwoLists(ListNode l1, ListNode l2) {// 创建一个虚拟头节点,以便方便处理ListNode dummy = new ListNode(0);ListNode current = dummy;// 遍历两个链表while (l1 != null && l2 != null) {if (l1.val < l2.val) {current.next = l1; // 将较小的节点连接到结果链表l1 = l1.next; // 移动到下一个节点} else {current.next = l2;l2 = l2.next;}current = current.next; // 移动当前节点指针}// 处理剩余的节点if (l1 != null) {current.next = l1;} else {current.next = l2;}// 返回合并后的链表,跳过虚拟头节点return dummy.next;}public static void main(String[] args) {// 测试合并功能ListNode l1 = new ListNode(1);l1.next = new ListNode(2);l1.next.next = new ListNode(4);ListNode l2 = new ListNode(1);l2.next = new ListNode(3);l2.next.next = new ListNode(4);MergeSortedLists merger = new MergeSortedLists();ListNode mergedList = merger.mergeTwoLists(l1, l2);// 打印合并后的链表while (mergedList != null) {System.out.print(mergedList.val + " ");mergedList = mergedList.next;}}
}
代码说明:
- ListNode 类:定义了链表节点的结构,包括节点值和指向下一个节点的指针。
- mergeTwoLists 方法:
- 创建一个虚拟头节点
dummy
,简化链表的操作。 - 使用
current
指针来构建合并后的链表。 - 遍历
l1
和l2
,将较小的节点连接到current
,并移动指针。 - 处理剩余的节点。
- 创建一个虚拟头节点
- main 方法:创建两个链表并调用
mergeTwoLists
方法,最后打印合并后的链表。
通过这个实现,你可以有效地合并两个已排序的链表。