LeetCode 21 Merge Two Sorted Lists (C, C ++, Java, Python), leetcodesorted
Problem: Merge two sorted linked lists and return it as a new list. The new list shoshould be made by splicing together the nodes of the first two lists.
Solution: two ordered linked lists. Each time the smallest element in the header is taken, this element is removed from the original linked list and cyclically
Given two ordered linked lists, the linked list must be merged into an ordered linked list, and no additional space can be used.
Java source code (344 ms ):
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode head,p; if(l1==null)return l2; if(l2==null)return l1; if(l1.val > l2.val){ p=l2;l2=l2.next; }else{ p=l1;l1=l1.next; } head=p; while(l1!=null && l2!=null){ if(l1.val > l2.val){ p.next=l2;l2=l2.next; }else{ p.next=l1;l1=l1.next; } p=p.next; } if(l1==null)p.next=l2; else p.next=l1; return head; }}
C language source code (3 ms ):
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) { struct ListNode *head,*p; if(l1==NULL)return l2; if(l2==NULL)return l1; if(l1->val > l2->val){ p=l2; l2=l2->next; }else{ p=l1; l1=l1->next; } head=p; while(l1!=NULL && l2!=NULL){ if(l1->val > l2->val){ p->next=l2; l2=l2->next; }else{ p->next=l1; l1=l1->next; } p=p->next; } if(l1==NULL)p->next=l2; else p->next=l1; return head;}
C ++ source code (13 ms ):
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode *head,*p; if(l1==NULL)return l2; if(l2==NULL)return l1; if(l1->val > l2->val){ p=l2;l2=l2->next; }else{ p=l1;l1=l1->next; } head=p; while(l1!=NULL && l2!=NULL){ if(l1->val > l2->val){ p->next=l2;l2=l2->next; }else{ p->next=l1;l1=l1->next; } p=p->next; } if(l1==NULL)p->next=l2; else p->next=l1; return head; }};
Python source code (67 ms ):
# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # @param {ListNode} l1 # @param {ListNode} l2 # @return {ListNode} def mergeTwoLists(self, l1, l2): if l1==None:return l2 if l2==None:return l1 p=l1 if l1.val > l2.val: p=l2;l2=l2.next else:p=l1;l1=l1.next head=p while l1!=None and l2!=None: if l1.val > l2.val: p.next=l2;l2=l2.next else:p.next=l1;l1=l1.next p=p.next if l1==None:p.next=l2 else:p.next=l1 return head