“持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情”
前言
之前小六六一直觉得自己的算法比较菜,算是一个短板吧,以前刷题也还真是三天打鱼,两台晒网,刷几天,然后就慢慢的不坚持了,所以这次,借助平台的活动,打算慢慢的开始开刷,并且自己还会给刷的题总结下,谈谈自己的一些思考,和自己的思路等等,希望对小伙伴能有所帮助吧,也可以借此机会把自己短板补一补,希望自己能坚持下去呀
题目
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入: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);
}
}
复制代码
双指针法
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,说明后面就没有了
结尾
好了,这个简单的链表题就完了,我相信只要点开的小伙伴,都能理解,毕竟简单,大伙一起慢慢来哈,大家继续加油!