思路一:两个指针
- 定义两个指针,
从前往后遍历每个元素
,将当前p1与p2锁指定的元素进行比较,则可确定应该选取那个值,然后变化选取值所对应的指针;不断进行比较
public ListNode Merge(ListNode list1,ListNode list2) {
//为每个链表各自定义一个指针
ListNode p1 = list1;
ListNode p2 = list2;
//新链表的头节点
ListNode newHead = null;
//新链表当前尾部的节点,方便插入
ListNode endNode=null;
//当两个指针都没有遍历到链表的尾部
//说明比较还没有完成
while((p1!=null)&(p2!=null)){
//链表1的数据<链表2的数据
if(p1.val<p2.val){
//假如新链表为空
if(newHead==null){
newHead=p1;
endNode=newHead;
}else{
endNode.next=p1;
endNode=p1;
}
p1=p1.next;
}else{
if(newHead==null){
newHead=p2;
endNode=newHead;
}else{
endNode.next=p2;
endNode=p2;
}
p2=p2.next;
}
}
//链表2的数据全部添加到新链表中
//这时只需要把链表1中的剩余数据添加到新的链表中即可
if(p2==null){
endNode.next=p1;
//同理
}else{
endNode.next=p2;
}
return newHead;
}
思路二:递归的方法
//使用递归的方法
public ListNode Merge1(ListNode list1,ListNode list2) {
if(list1 == null){
return list2;
}
if(list2 == null){
return list1;
}
if(list1.val <= list2.val){
list1.next = Merge(list1.next, list2);
return list1;
}else{
list2.next = Merge(list1, list2.next);
return list2;
}
}