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

来源:互联网 发布:怎么申请退款淘宝 编辑:程序博客网 时间:2024/06/03 21:09

题目:http://oj.leetcode.com/problems/merge-two-sorted-lists/

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.

题目翻译:

合并两个有序链表,并返回该新链表。新链表应该由前两个链表中的节点拼接生成。
分析:

        使用归并的思想,每次选择值较小的节点接到新链表的后面。

C++实现:

/** * 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) {if(l1 == NULL){return l2;}if(l2 == NULL){return l1;}ListNode *node = NULL;if(l1->val <= l2->val){node = l1;l1 = l1->next;}else{node = l2;l2 = l2->next;}ListNode *head = node;while(l1 != NULL && l2 != NULL){if(l1->val <= l2->val){node->next = l1;node = node->next;l1 = l1->next;}else{node->next = l2;node = node->next;l2 = l2->next;}}if(l1 != NULL){node->next = l1;}else if(l2 != NULL){node->next = l2;}return head;    }};

Java实现:

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {if (l1 == null) {return l2;}if (l2 == null) {return l1;}ListNode node = null;ListNode head = null;while (l1 != null && l2 != null) {if (l1.val <= l2.val) {if (node == null) {node = l1;head = node;} else {node.next = l1;node = node.next;}l1 = l1.next;} else {if (node == null) {node = l2;head = node;} else {node.next = l2;node = node.next;}l2 = l2.next;}}if (l1 != null) {node.next = l1;} else if (l2 != null) {node.next = l2;}return head;    }}

Python实现:

# Definition for singly-linked list.# class ListNode:#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution:    # @param two ListNodes    # @return a ListNode    def mergeTwoLists(self, l1, l2):        if l1 == None:            return l2        if l2 == None:            return l1                node = None                while l1 != None and l2 != None:            if l1.val <= l2.val:                if node == None:                    node = l1                    head = node                else:                    node.next = l1                    node = node.next                                    l1 = l1.next            else:                if node == None:                    node = l2                    head = l2                else:                    node.next = l2                    node = node.next                                    l2 = l2.next                            if l1 != None:            node.next = l1        elif l2 != None:            node.next = l2                            return head

        感谢阅读,欢迎评论!

0 0
原创粉丝点击