合并两个有序链表
本人大四实习生,水平有限。有错望海涵。
思路
可使用递归。比较两个链表的头结点,值小的当头结点
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode MergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null){
return l2;
}
if(l2==null){
return l1;
}
ListNode head;
if(l1.val<l2.val){
head=l1;
l1.next=MergeTwoLists(l1.next,l2);
}else{
head=l2;
l2.next=MergeTwoLists(l1,l2.next);
}
return head;
}
}
个人理解的递归:
- 使用递归的条件:
- 有明确的结束条件
- 每次递归,问题规模应减少
- 有对于最后一步的判断 ,这里体现在头节点是否为null的判断
- 明确使用递归的这个函数的意义, 这个函数的意义是合并两个有序链表。
l1.next=MergeTwoLists(l1.next,l2);
这句的意义就是把l1作为头结点,后面指向一个有序链表(这个有序链表怎么完成的不用去管,因为MergeTwoLists这个函数就是合并两个有序链表)。 所以这道题的思路其实是,比较两个链表的头结点,值小的做头结点。 - 递归的中间部分不用考虑,考虑开头,中间部分和开头是一样的。