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 p=list1,q=list2;
if(p.val>q.val){
p = list2 ; //p small
q = list1 ;
}
ListNode r1= p.next,r2 = q.next ;
while(q!=null){
if (r1.val >= q.val){
r2 = q.next ;
q.next=r1 ;
p.next=q ;
p = r1 ;
r1 = p.next ;
q = r2 ;
}else {
p = r1 ;
r1 = r1.next ;
if (r1 == null){
p.next = q ;
}
}
}
return list1;
}
}
这个p不判断空不会空指针吗?还有你这个变量名太随意了,即使有一个链表为空也要合并,可以参考下我写的
// 合并链表,合并两个有序链表,合并后仍旧有序
private static LinkList mergeList(LinkList list1, LinkList list2){
if(list1 == null && list2 == null){
return null;
}
LinkList listMerge = new LinkList();
LinkList resList = listMerge;
while(list1 != null && list2 != null){
if((Integer)list1.getData() > (Integer) list2.getData()){
listMerge.setNext(list1);
list1 = list1.getNext();
} else{
listMerge.setNext(list2);
list2 = list2.getNext();
}
listMerge = listMerge.getNext();
}
listMerge.setNext(list1 == null? list2 : list1);
return resList;
}