题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
在 Java 中,链表是一种常见的线性数据结构,它由节点组成,每个节点包含数据和指向下一个节点的引用。以下是关于 Java 中链表的一些基本知识:
1. 单向链表(Singly Linked List)
定义: 每个节点包含数据和指向下一个节点的引用。
优点: 插入和删除节点的时间复杂度为 O(1)。
缺点: 访问节点的时间复杂度为 O(n),因为需要从头节点开始遍历。
2. 双向链表(Doubly Linked List)
定义: 每个节点包含数据、指向下一个节点的引用和指向前一个节点的引用。
优点: 可以双向遍历链表,插入和删除节点的时间复杂度为 O(1)。
缺点: 占用更多的内存空间,因为每个节点需要额外的指向前一个节点的引用。
3. Java 中的链表实现
Java 中的链表可以使用 LinkedList 类进行实现,它实现了 List 接口,可以作为链表来使用。
LinkedList 类实现了双向链表,因此可以高效地进行节点的插入、删除和遍历操作。
4. 链表的操作
插入节点:在链表中插入节点,可以通过改变节点的引用来实现。
删除节点:从链表中删除节点时,需要修改相邻节点的引用。
遍历链表:可以使用循环或递归来遍历链表中的节点。
5. 链表的应用
链表常用于实现栈、队列等数据结构。
在算法中,链表常用于解决需要频繁插入和删除操作的问题。
l1.val表示l1头结点的值。l1.next表示下一节点。
Tip1:
方法逻辑:递归
1:如果其中一个链表为空,直接返回另一个链表。
2:比较两个链表的头节点,将较小的头节点作为合并后链表的头节点。
3:对较小头节点的下一个节点和另一个链表继续进行合并操作,直至某个链表为空。
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null){return l2;}
else if(l2==null){return l1;}
else if(l1.val<l2.val){
l1.next=mergeTwoLists(l1.next,l2);
return l1;
}
else{
l2.next=mergeTwoLists(l2.next,l1);
return l2;
}
}
}