方法1:*采用递归思想*
public ListNode Merge(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;
}
}
递归思想:
为什么可以使用递归?
- 因为链表有序,所以其实就是先进行一次比较之后,选出第一个头结点(假设是list1的头结点)
- 当选出第一个头结点之后,将剩下的list1与list2进行合并
- 并且将第一个头结点指向第二次merge的头结点。即:
list1.next = Merge(list1.next, list2);
如何判断终止条件?
当一直递归进行合并时,如果某一个链表为空了,即没有接下去的节点了。便可以将另一个链表直接返回,加到上一次递归选出的头节点的后面。
方法2:采用循环来进行实现