0
点赞
收藏
分享

微信扫一扫

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


前言

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

题目

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

示例:

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

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

题解

直接合并后排序

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

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);
}
}

双指针法

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

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

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

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,说明后面就没有了

结尾

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

举报

相关推荐

0 条评论