zoukankan      html  css  js  c++  java
  • 腾讯//合并两个有序链表

    将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

    示例:

    输入:1->2->4, 1->3->4
    输出:1->1->2->3->4->4
    /**
     * 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 temp1 = l1;
            ListNode temp2 = l2;
            
            ListNode ret = new ListNode(0);
            
            ListNode ret1 = ret;
            while(temp1!=null&&temp2!=null){
                if(temp1.val>temp2.val){
                    ret.next = temp2;
                    ret = ret.next;
                    temp2 = temp2.next;
                }else{
                    ret.next = temp1;
                    ret = ret.next;
                    temp1 = temp1.next;
                }
            }
            if(temp1==null&&temp2!=null)
                ret.next = temp2;
            if(temp2==null&&temp1!=null)
                ret.next = temp1;
            return ret1.next;
        }
    }

    递归

    /**
     * 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 temp1 = l1;
            ListNode temp2 = l2;
            ListNode ret = getResult(temp1, temp2);
            return ret;
        }
        public ListNode getResult(ListNode t1, ListNode t2){
            ListNode t0 = new ListNode(0);
            ListNode head = t0;
            if(t1 == null) return t2;
            if(t2 == null) return t1;
            if(t1.val>t2.val){
                t0.next = t2;
                t0 = t0.next;
                t0.next = getResult(t1, t2.next);
            }else{
                t0.next = t1;
                t0 = t0.next;
                t0.next = getResult(t1.next,t2);
            }
            return head.next;
        }
    }
    /**
     * 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;
            else if(l2 == NULL)
                return l1;
            
            ListNode* pMergeHead = NULL;
            if(l1->val < l2->val){
                pMergeHead = l1;
                pMergeHead->next = mergeTwoLists(l1->next, l2);
            }else{
                pMergeHead = l2;
                pMergeHead->next = mergeTwoLists(l1, l2->next);
            }
            return pMergeHead;
        }
    };
  • 相关阅读:
    唯一的确定一棵二叉树
    Educational Codeforces Round 55 (Rated for Div. 2)
    524 (Div. 2) Masha and two friends
    单链表实现n(n≥20)的阶乘
    表达式的后缀表示
    UPCOJ2012 The King’s Walk(dp)
    第七届山东省省赛D Swiss-system tournament(归并排序)
    第七届山东省省赛C Proxy(最短路)
    hihocoder1185 连通性·三
    hihocoder1184 连通性二·边的双连通分量
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602474.html
Copyright © 2011-2022 走看看