题目:合并两个有序列表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
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. |
如果大家有更好的方法,欢迎一起探讨。