递归思想
使用递归,要了解 mergeTwoLists( l1, l2) 的意义
mergeTwoLists( l1, l2) 代表将 l1 和 l2 排序,返回排序好的链表(头结点)
所以递归的过程:
先判断 l1和l2 的大小,如果l1小,将l1先拿出来,把l1之后的节点和l2排序,mergeTwoLists( l1.next, l2) ,排除好了以后,将排序好的链表挂在l1之后,l1.next=mergeTwoLists(l1.next,l2);
反之亦然
结束:
当l1或者l2为空的时候,
然后考虑当l1或者l2为空的时候,我要返回什么,
当l1为空,我将l1和l2排序,那就直接返回l2就行了,反之亦然
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1==null){return l2;}
if(l2==null){ return l1;}
if(l1.val<l2.val){
l1.next=mergeTwoLists(l1.next,l2);
return l1;
}else{
l2.next=mergeTwoLists(l1,l2.next);
return l2;
}
}
}
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if l1==None :
return l2
elif l2==None:
return l1
else:
if l1.val<l2.val:
l1.next=self.mergeTwoLists(l1.next,l2)
return l1
else:
l2.next=self.mergeTwoLists(l1,l2.next)
return l2