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一直找出来才可以)。

posted @ 2019-09-26 21:10  肥斯大只仔  阅读(127)  评论(0编辑  收藏  举报