思路:
链表问题考虑哑节点!
引入哑节点,值设为-1,作为合并链表的头节点之前prehead;l1,l2分别指向传入链表的头节点。
比较l1,l2,把prev.next指向较小的那个,prev和较小的指针分别向前移动,这里由于l1和l2的值相同,不妨先移动l2,依此类推。
重复该过程,直至遍历完整个链表。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode prehead = new ListNode(-1);
ListNode prev = prehead;
while(l1!=null && l2!=null){
if(l1.val<=l2.val){
prev.next=l1;
l1=l1.next;
}else{
prev.next=l2;
l2=l2.next;
}
prev=prev.next;
}
// 合并后 l1 和 l2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可
prev.next=l1==null?l2:l1;
return prehead.next;
}
}