可以使用迭代或递归的方式来实现。以下是两种方法的示例代码:
class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
public class MergeLinkedList {
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;
}
if (l2 != null) {
current.next = l2;
}
return dummy.next;
}
}
使用示例:
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);
MergeLinkedList merger = new MergeLinkedList();
ListNode mergedList = merger.mergeTwoLists(l1, l2);
class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
public class MergeLinkedList {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) {
return l2;
}
if (l2 == null) {
return l1;
}
if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
}
}
使用示例:
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);
MergeLinkedList merger = new MergeLinkedList();
ListNode mergedList = merger.mergeTwoLists(l1, l2);
以上代码示例中,我们定义了一个ListNode
类来表示链表节点,然后实现了一个MergeLinkedList
类来合并两个链表。迭代方法使用一个虚拟头节点dummy
和一个指针current
来遍历两个链表,比较节点值大小并逐个连接节点。递归方法则通过递归调用来合并链表,每次选择较小的节点连接,并不断向后移动。
这两种方法都能够在时间复杂度为O(n)的情况下合并两个有序链表,其中n是两个链表的总长度。在实际应用中,可以根据具体需求选择合适的方法来实现链表合并。
腾讯云相关产品和产品介绍链接地址:
请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。
领取专属 10元无门槛券
手把手带您无忧上云