题目内容
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 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;
}
}
迭代
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null) return l2;
if(l2==null) return l1;
ListNode head;
ListNode pre;
if(l1.val<=l2.val){
head=l1;
l1=l1.next;
}
else{
head=l2;
l2=l2.next;
}
pre=head;
while(l1!=null&&l2!=null){
if(l1.val<=l2.val){
pre.next=l1;
l1=l1.next;
}
else{
pre.next=l2;
l2=l2.next;
}
pre=pre.next;
}
if(l1 == null) {
pre.next = l2;
}
else {
pre.next = l1;
}
return head;
}
}