题目:
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
思路:
- 设置两个头指针,一个指针不动,用来返回最后头结点,一个指针用来组织节点顺序,遍历两链表,每次都指向小的节点
public class MergeTwoSortedLists {
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode h1 = new ListNode(0), h2 = h1;
while(l1!=null && l2!=null){
if(l1.val < l2.val){
h1.next = l1;
l1 = l1.next;
}else{
h1.next = l2;
l2 = l2.next;
}
h1 = h1.next;
}
if(l1 == null){
h1.next = l2;
}
if(l2 == null){
h1.next = l1;
}
return h2.next;
}
}
- 还有一种更屌的方法,递归,也是每次选出最小的节点,不过代码更加简洁
//递归解法,头指针每次指向两个列表中最小的节点,然后递归
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null)
return l2;
if(l2 == null)
return l1;
ListNode h;
if(l1.val < l2.val){
h = l1;
h.next = mergeTwoLists(l1.next, l2);
}else{
h = l2;
h.next = mergeTwoLists(l1, l2.next);
}
return h;
}