六六力扣刷题之合并两个链表(升序排序)

“持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

前言

之前小六六一直觉得自己的算法比较菜,算是一个短板吧,以前刷题也还真是三天打鱼,两台晒网,刷几天,然后就慢慢的不坚持了,所以这次,借助平台的活动,打算慢慢的开始开刷,并且自己还会给刷的题总结下,谈谈自己的一些思考,和自己的思路等等,希望对小伙伴能有所帮助吧,也可以借此机会把自己短板补一补,希望自己能坚持下去呀

题目

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4

小六六带领大家来读读题,其实还是很简单的,就是2个单向链表嘛,我每次去比较这个链表,如果谁小,谁就添加到最后返回的那个链表上去,直到一个链表为null,说明就剩下另外一个,直接把另外一个的剩下的节点加入到那个我们需要返回的链表上去,结果就出来了嘛

题解

直接合并后排序

image.png

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        for (int i = 0; i != n; ++i) {
            nums1[m + i] = nums2[i];
        }
        Arrays.sort(nums1);
    }
}

复制代码

双指针法


public static ListNode1 mergeTwoLists(ListNode1 l1, ListNode1 l2) {

    ListNode1 pre = new ListNode1(-1);

    ListNode1 res = pre;

    if (l1 == null) {
        return l2;
    }
    if (l2 == null) {
        return l1;
    }
    while (l1 != null && l2 != null) {
        if (l1.val > l2.val) {
            res.next = l2;
            l2 = l2.next;
        } else {
            res.next = l1;
            l1 = l1.next;
        }

        res = res.next;
    }

    if (l1 == null) {
        res.next = l2;
    }

    if (l2 == null) {
        res.next = l1;
    }

    return pre.next;


}
复制代码

这题还是比较简单的,相信大家都可以做出来,我们来分析下这个题

  • 第一步就是我们先创建一个结果对象,这个对象是用来返回的
  • 第二步,就是判断我们的临界条件
  • 第三步,我们就是一个个去循环,判断哪个大,就往后面移动,移动到最后
  • 第四步,如果发现一个链表到null,说明后面就没有了

结尾

好了,这个简单的链表题就完了,我相信只要点开的小伙伴,都能理解,毕竟简单,大伙一起慢慢来哈,大家继续加油!

猜你喜欢

转载自juejin.im/post/7105759947496882207