题目:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:
1、先判断两个链表是否为空。
2、由于这个链表没有头结点,所以要判断第一个节点哪个大,让小的链表的第一个节点作为合并链表的第一个节点。
3、遍历两个链表,如果两个链表的长度不一样,则将长链表剩下的部分直接连接到合并链表的后面。
代码:
/*
public class ListNode {
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(list1==null){//list1为空,list2不为空
return list2;
}
if(list2==null){//list1不为空,list2为空
return list1;
}
ListNode q,p,l,r;
if(list1.val>list2.val){//判断哪个链表的第一个节点小,让小的节点作为新链表的第一个节点
p=list1;
q=list2.next;
l=list2;
r=l;
}else{
p=list1.next;
q=list2;
l=list1;
r=l;
}
while(p!=null&&q!=null){
if(p.val>q.val){
r.next=q;
r=q;
q=q.next;
}else{
r.next=p;
r=p;
p=p.next;
}
}
if(p!=null){//list2链表短
r.next=p;
}
if(q!=null){//list1链表短
r.next=q;
}
return l;
}
}
使用递归的情况:
/*
public class ListNode {
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;
}
if(list1==null&&list2==null){
return null;
}
ListNode pMergeHead=null;
if(list1.val<=list2.val){
pMergeHead=list1;
pMergeHead.next=Merge(list1.next,list2);
}else{
pMergeHead=list2;
pMergeHead.next=Merge(list1,list2.next);
}
return pMergeHead;
}
}