[LeetCode21-链表-简单] 合并2个有序列表
这个题目是这样的,就是说有两个链表,这两个链表按照非递减的顺序排列, 我们要把这两个升序的链表合并,返回一个新的升序链表,新链表要求拼接给定的2个链表的所有结点,也就是说如果有重复的结点,也要全部返回列在新链表中
1->2->4
1->3->5 =》 返回的是 1->1->2->3->4->5
首先,拿到这个题目,你会怎么想,我们假设第1个链表是ListNode1, 第2个链表是ListNode2, 返回的结果链表是ListNodeResult 那么我们接下来是怎么操作呢:
1. ListNode1的第1个结点 和 ListNode2的第1个结点比较,哪个小,我们就把这个小的作为结果链表ListNodeResult的第1个结点, 然后剩下的ListNode1 和 ListNode2进行同样的比较
If(ListNode1.val <= ListNode2.val) ListNode1 = ListNode1.next => ListNode1 和 ListNode2继续进行同样的比较
If(ListNode2.val <= ListNode2.val) ListNode2 = ListNode2.next => ListNode1 和 ListNode2继续进行同样的比较
看到上面的“同样的比较”, 我们能想到什么?? =》 递归 对不对 ? =》 所以这道题目,显然可以通过递归来进行 =》 我们来写代码
在写代码时,我不自觉的写成了迭代的方法,看来迭代还是更符合我常规的代码思路,请看下面
public class ListNode { public int val; public ListNode next; public ListNode(int x = 0, ListNode nextNode = null) { val = x; next = nextNode; } } public ListNode CombineTwoListNode(ListNode node1, ListNode node2) { ListNode resultNode = new ListNode(0, null); //初始化结果结点,把它的头部作为一个哑巴结点 while (node1 != null && node2 != null) { if (node1.val <= node2.val) { resultNode.next = new ListNode(node1.val, null); node1 = node1.next; } else { resultNode.next = new ListNode(node2.val, null); node2 = node2.next; } resultNode = resultNode.next; } if (node1 != null) //如果循环完,node1还有结点,就把它直接放在结果结点后面 resultNode.next = node1; if (node2 != null) //如果循环完,node2还有结点,就把它直接放在结果结点后面 resultNode.next = node2; return resultNode.next; //扣除掉初始化时的哑巴结点,就是我们需要的结果结点 }
递归的写法我们也看看
public ListNode MergeTwoListNode(ListNode node1, ListNode node2) { if (node1 == null) { return node1; } else if (node2 == null) { return node2; } else if (node1.val < node2.val) { node1.next = MergeTwoListNode(node1.next, node2); return node1; } else { node2.next = MergeTwoListNode(node1, node2.next); return node2; } }
分类:
算法
, 算法 / LeetCode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律