链接
牛客:合并两个排序的链表
LeetCode:剑指 Offer 25. 合并两个排序的链表
思路
涉及到链表的很多题目基本都可以用递归和非递归两种方法
- 非递归很容易想到,因为是有序链表,所以依次比较连接即可,注意头尾的处理。
- 递归方法比较难操作,但是代码很简单,
代码
牛客:
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
//新建一个头节点,用来存合并的链表。
ListNode head = new ListNode(-1);
ListNode root = head;
while (list1 != null && list2 != null) {
if (list1.val <= list2.val) {
root.next = list1;
list1 = list1.next;
} else {
root.next = list2;
list2 = list2.next;
}
root = root.next;
}
//把未结束的链表连接到合并后的链表尾部
root.next = list1 == null ? list2 : list1;
return head.next;
}
}
LeetCode:
class Solution {
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;
}
}
}
牛客采用的是非递归,LeetCode采用递归。
相似题
题目一样:21. 合并两个有序链表