19.9.26 合并两个有序链表 简单(课本)
题目:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
代码:
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 class Solution { 10 public ListNode mergeTwoLists(ListNode l1, ListNode l2) { 11 ListNode Curr1 = l1; 12 ListNode Curr2 = l2; 13 ListNode l3 = new ListNode(0); 14 ListNode Curr3 = l3; 15 16 if(l1 == null) return l2; 17 if(l2 == null) return l1; 18 19 l3.next = Curr1.val >= Curr2.val ? Curr2 : Curr1; 20 21 while(Curr1 != null && Curr2 != null){ 22 if(Curr2.val <= Curr1.val){ 23 Curr3.next = Curr2; 24 Curr3 = Curr2; 25 Curr2 = Curr2.next; 26 } 27 28 else if(Curr1.val < Curr2.val){ 29 Curr3.next = Curr1; 30 Curr3 = Curr1; 31 Curr1 = Curr1.next; 32 } 33 34 } 35 if(Curr1 == null){ 36 Curr3.next = Curr2; 37 } 38 else Curr3.next = Curr1; 39 return l3.next; 40 } 41 }
心得:
1、这是一道入门的题目,但是我觉得难度很大,虽然它被标为简单,因为写起来和思考起来挺绕的;
2、今天上课时做过,做了差不多70分钟写了很多但是还是做不出来,最后不得不看书,今晚重新在leetcode里写但是也有部分忘了不得不去看书;
3、再一次复习总结完,说一下心得体会:
①数组给人感觉会容易很多,比较一下,将较小的数插入空表,然后指针后移一位,再继续比较,直到某个数组到底后,直接将另一个数组接在新数组上;
②链表认真理解后,其实和数组的想法是一样的,只是不用新建一个表,直接利用原有的头结点进行连接就行了;
③Curr3是为了保存比较后较小结点,为了下一次比较后的连接,不然要找到上一个结点很困难(要通过l3一直找出来才可以)。