剑指 Offer 25. 合并两个排序的链表
说明
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
题解思路
1、将两个链表放入数组中,逆向排序,然后以链表形式输出(暴力)
2、双指针
代码实现
1、暴力法
# 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:
if not l1 and not l2:
return None
tmp = []
while l1:
tmp.append(l1.val)
l1 = l1.next
while l2:
tmp.append(l2.val)
l2 = l2.next
tmp.sort(reverse = True)
ans = ListNode(tmp.pop())
node = ans
while tmp:
temp = ListNode(tmp.pop())
node.next = temp
node = temp
return ans
2、双指针
# 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:
head = ListNode(0)
tmp = head
while l1 and l2:
if l1.val < l2.val:
tmp.next = l1
tmp = l1
l1 = l1.next
else:
tmp.next = l2
tmp = l2
l2 = l2.next
if l1:
tmp.next = l1
else:
tmp.next = l2
return head.next