哑节点
创建 哑节点 作为 结果链表 的开头,返回结果是这个节点的下一个位置。目的是:在未遍历之前,我们不知道构建的结果中,开头元素到底是 l1 还是 l2, 为了让代码整齐,创建哑节点。
使用 move 游标
哑节点标记了 结果链表 的开头,因此是不能移动的。为了把两个链表 merge 的结果放到结果链表的最后,就需要使用一个 move 游标指向 结果链表 的最后一个元素。初始时,move 指向 哑节点,之后随着结果链表的增加而不停地向后移动,始终保持其指向 结果链表 的最后一个元素。
while 遍历两个元素
涉及到两个元素的遍历题,使用 while l1 and/or l2 的方式。即两个元素都没有遍历完或者至少有一个没遍历完,具体使用 and 还是 or 要根据场景进行选择。
这类常见的题目有:
合并两个链表
两数相加/两个链表表示的数相加
没用完的元素仍需拼接
当 while 循环结束之后,l1 和 l2 至少遍历完了一个,另一个链表可能没有用完,因此需要拼接到 结果链表 的结尾。
合并链表 或者 两数相加 都要记得这个问题。
作者:fuxuemingzhu
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/xin-shou-you-hao-xue-hui-tao-lu-bu-fan-cuo-4nian-l/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。