递归思想 使用递归,要了解 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