思路:
1.四个指针 p q tail newHead
newHead保存最小的头节点
p=newHead.next; p是下一个
q是另一个链表的结点
2.当p>q时 尾巴指向q,q=q.next q后移,注意在后移之前维护tail
3.考虑特殊情况:
q或者p==null的时候
直接把tail执行另一个结点就好了,因为链表本身有序
代码入下
/**
* 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){
if(l1==null)return l2;
if(l2==null)return l1;
ListNode newHead=(l1.val>l2.val)?l2:l1;
ListNode p=newHead.next;
ListNode q=newHead==l1?l2:l1;
ListNode tail=newHead;
while(p!=null&&q!=null){
if(p.val>q.val){
tail.next=q;
tail=q;
q=q.next;
}else{
tail.next=p;
tail=p;
p=p.next;
}
}
if(p==null){
tail.next=q;
}
else{
tail.next=p;
}
return newHead;
}
}
原创不易,给个赞吧!啾咪。