思路:可以借鉴归并排序的那个步骤,只不过少了递归的过程了,其进行归并的步骤是可以复现的。
分别从两个链表开始,因为这两个链表的顺序都是排列好的,所以我们只需要用两个指针遍历链表,哪一个数小,就首先加入哪个结点。说白了,这里并不是新创建一个链表,而是把两个链表的指向改变了。
具体步骤直接上代码看就行了。
/**
* 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 list1, ListNode list2) {
ListNode dummy=new ListNode(-1);
ListNode head=null;
if(list1==null&&list2==null)
return null;
else if(list1==null&&list2!=null)
{
dummy.next=list2;
head=dummy.next;
}
else if(list1!=null&&list2==null)
{
dummy.next=list1;
head=dummy.next;
}
else if(list1!=null&&list2!=null){
ListNode tmp1=list1;
ListNode tmp2=list2;
if(tmp1.val<=tmp2.val&&tmp1!=null)
dummy.next=tmp1;
else if(tmp1.val>tmp2.val&&tmp2!=null)
dummy.next=tmp2;
head=dummy.next;
while(tmp1!=null&&tmp2!=null){
if(tmp1.val<=tmp2.val){
dummy.next=tmp1;
tmp1=tmp1.next;
}
else{
dummy.next=tmp2;
tmp2=tmp2.next;
}
dummy=dummy.next;
}
while(tmp1!=null){
dummy.next=tmp1;
dummy=dummy.next;
tmp1=tmp1.next;
}
while(tmp2!=null){
dummy.next=tmp2;
dummy=dummy.next;
tmp2=tmp2.next;
}
}
return head;
}
}