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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值