1. 题目
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
2. 思路
- 将两个链表依次输出到一个数组中,由于剑指offer中Python 不能使用sort() 方法,可以采用快排和冒泡排序算法进行排序,输出到新的链表中
- 遍历两个链表,将值进行比较,小的放到新链表中;如果有链表遍历完成,则直接将另一个链表返回到新链表中
3. 程序
- 链表转数组,再转链表
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
l11=[]
while l1:
l11.append(l1.val)
l1= l1.next
while l2:
l11.append(l2.val)
l2 = l2.next
# 获得数组l11,进行排序,刷题中不允许使用sort()方法
# 冒泡
l11
for i in range(len(l11)):
for j in range(len(l11)-i-1):
if l11[j] > l11[j+1]:
tp = l11[j+1]
l11[j+1] = l11[j]
l11[j] = tp
node = ListNode(0)
tmp = node
for i in l11:
tmp.next = ListNode(i)
tmp = tmp.next
return node.next
- 两个链表进行比较
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
tmp = node = ListNode(0)
while l1 and l2:
if l1.val < l2.val:
tmp.next, l1 = l1, l1.next
else:
tmp.next, l2 = l2, l2.next
tmp = tmp.next
if l1:
tmp.next, l1 = l1, l1.next
if l2:
tmp.next, l2 = l2,l2.next
return node.next
4. 总结
- 思路比较简单,两种方法也容易想到
- 注意一些基本知识:排序算法,链表是否为空
- Python 多元赋值