LeetCode 21. Merge Two Sorted Lists
Description
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
Example
Code
- java
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode head = new ListNode(0);
ListNode pNode = head;
while(l1 != null || l2 != null) {
if(l1 != null && (l2 == null || l1.val < l2.val)) {
pNode.next = l1;
l1 = l1.next;
} else {
pNode.next = l2;
l2 = l2.next;
}
pNode = pNode.next;
}
pNode.next = null;
return head.next;
}
}
- python
# 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:
pNode = head = ListNode(0)
while(l1 != None or l2 != None):
if(l1 != None and (l2 == None or l1.val < l2.val)):
pNode.next = l1
l1 = l1.next
else:
pNode.next = l2
l2 = l2.next
pNode = pNode.next
if pNode != None:
pNode.next = None
return head.next
- Others’ Solution
- java
public ListNode mergeTwoLists(ListNode l1, ListNode l2){
if(l1 == null) return l2;
if(l2 == null) return l1;
if(l1.val < l2.val){
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else{
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
}
Conclusion
- 多开一个队首元素的空间可以方便操作
- 评论区递归版本我觉得可以
- 在py和java的语法中挣扎,py没有
&&
和||
,取而代之的是and
和or