思路: 新建一个链表头结点。两个指针分别在两个链表头部,比较哪一个小。把小节点放到新的空 头结点下一位。然后新链表与小的节点所在的链表的指针都向后移一位。再次比较。直到某一个链表到尾部。将另一个还未到头的链表的指针所在节点直接接到新链表尾部。
这里我原先是遍历加入的,后来看到可以直接把剩余链表的尾部直接接到新链表尾部。这个方法更好!
最后返回新链表头结点的next节点即可。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode head=new ListNode(0);
if(l1==null ){
return l2;
}
if(l2==null){
return l1;
}
ListNode node=head;
while(l1!=null && l2!=null){
if(l1.val<=l2.val){
node.next=l1;
node=l1;
l1=l1.next;
}else{
node.next=l2;
node=l2;
l2=l2.next;
}
}
if(l1!=null){
node.next=l1;
}
if(l2!=null){
node.next=l2;
}
return head.next;
}
}