
题目:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入: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一直找出来才可以)。
本文介绍了一种算法,用于合并两个有序链表成一个新的有序链表。通过比较两个链表的节点值,逐步拼接形成最终的有序链表。讨论了链表与数组处理方式的区别,分享了实现过程中的难点与解决思路。

被折叠的 条评论
为什么被折叠?



