题目:合并两个有序列表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
1 | 输入:1->2->4, 1->3->4 |
思路
上次的链表题可参考: LeetCode-2 两数相加
首先需要理解ListNode这个class。
1 | # Definition for singly-linked list. |
每个ListNode()都有两个属性,一个是本身的值(val),另一个则是指向另一个ListNode()对象。比如示例中的输出:7 -> 0 -> 8。其实是三个ListNode()对象,产生的过程如下:
1 | tmp = ListNode(0) |
对ListNode这样的链表有了理解之后,本题就相对简单了:
- 初始化一个
outNode=ListNode(None),用于最终输出,再初始化一个curNode=outNode用于记录当前ListNode。 - 当l1和l2均非空时:
- 若
l1的值比l2的值大,则curNode.next指向l1,l1向后推移一位:l1=l1.next - 若
l2的值比l1的值大,则curNode.next指向l2,l2向后推移一位:l2=l2.next - 当前节点向后推移一位:
curNode = curNode.next
- 若
- 将当前节点指向剩余非空节点
- 返回结果
实现:
1 | # Definition for singly-linked list. |
如果大家有更好的方法,欢迎一起探讨。
