LeetCode 21 Merge Two Sorted Lists (C,C++,Java,Python)

来源:互联网 发布:如何参观清华大学知乎 编辑:程序博客网 时间:2024/03/29 08:26

Problem:

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.

Solution:

两个有序链表,每次取头部最小的那个元素,然后将这个元素从原来链表中去掉,依次循环

题目大意:

给定两个有序链表,要求将链表合并为一个有序链表,并且不能使用额外的空间

Java源代码(344ms):

/** * 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语言源代码(3ms):

/** * 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++源代码(13ms):

/** * 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源代码(67ms):

# 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


0 0