目录
1、题目
2、解题思路
1、常规情况
1、判断两个头节点的大小,确定哪个节点是新链表的头节点
2、判断list1和list2的大小,把较小的节点的地址放在cur.next
3、将cur和较小节点往后走一位。
4、重复以上直到list1或者list2为null。
5、判断谁为null,将另一个的地址放在cur.next。
2、两个链表为空
判断是否为空如果为空返回空链表。
3、一个链表为空
判断并返回另一个不为空的链表。
3、解题代码
/**
* 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 head;
//判断链表为空
if(list1==null&&list2==null){
return list1;
}else if(list1==null){
return list2;
}else if(list2==null){
return list1;
}else{
//判断头节点
if(list1.val< list2.val){
head=list1;
list1=list1.next;
}else{
head=list2;
list2=list2.next;
}
ListNode cur=head;
//合并链表
while(list1!=null&&list2!=null){
if(list1.val> list2.val){
cur.next=list2;
cur=cur.next;
list2=list2.next;
}else{
cur.next=list1;
cur=cur.next;
list1=list1.next;
}
}
//链接剩余节点
if(list1==null){
cur.next=list2;
}else{
cur.next=list1;
}
}
return head;
}
}