递归
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1==null){
return list2;
}
if(list2==null){
return list1;
}
ListNode newHeadNode =null;
if(list1.val>list2.val){
newHeadNode =list2;
newHeadNode.next =Merge(list1,list2.next);
}else{
newHeadNode =list1;
newHeadNode.next =Merge(list1.next,list2);
}
return newHeadNode;
}
}
非递归
使用两个指针,一个为新链表头,一个是新链表当前节点
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
// 判断输入的链表是否为空的指针。如果第一个链表为空,则直接返回第二个链表;如果第二个链表为空,则直接返回第一个链表。
if(list1==null && list2==null){
return null;
}
if(list2==null && list1!=null){
return list1;
}
if(list2!=null && list1==null){
return list2;
}
// 初始化头结点,新链表当前节点node
ListNode newHead =null;
if(list1.val>list2.val){
newHead =list2;
list2=list2.next;
}
else{
newHead=list1;
list1=list1.next;
}
ListNode node = newHead; //合并后的当前节点
while(list1!=null || list2!=null){
if(list1==null){
node.next=list2;
return newHead;
}
if(list2==null){
node.next=list1;
return newHead;
}
if(list1.val>list2.val) {
node.next=list2;
list2=list2.next;
}else{
node.next=list1;
list1=list1.next;
}
node=node.next;
}
return newHead;
}
}