题目描述:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
解题思路:
先开辟一个头节点的空间(这里先假设头节点值为0,方便后面尾插法)
然后比较了l1和l2指向的节点,取出更小的那一个节点,然后指针往后移动一个位置。
代码实现:
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
newHead = ListNode(0) #假设为头节点
nH = newHead
while(l1 and l2):
if(l1.val < l2.val):
temp = l1.next # 保留l1的后续节点,防止丢失
l1.next = None
newHead.next = l1
newHead = newHead.next
l1 = temp #l1往后移一个位置
else:
temp = l2.next # 保留l2的后续节点,防止丢失
l2.next = None
newHead.next = l2
newHead = newHead.next
l2 = temp
if(l1 == None):
newHead.next = l2
if(l2 == None):
newHead.next = l1
return nH.next
def printLink(self,root):
r = root
while(r):
print(r.val)
r = r.next
root1 = ListNode(1)
n2 = ListNode(4)
n3 = ListNode(6)
root1.next = n2
n2.next = n3
root2 = ListNode(0)
r2 = ListNode(5)
r3 = ListNode(7)
root2.next = r2
r2.next = r3
s = Solution()
result = s.mergeTwoLists(root1,root2)
s.printLink(result)