zoukankan      html  css  js  c++  java
  • 剑指Offer:合并两个排序的链表

    剑指Offer:合并两个排序的链表

    题目要求:
    输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

    解题思路:

    1. 通过新建一个头节点,并且是动态分配内存,这样就可以根据传入的链表长度而不断增加;
    2. 新建一个头指针指向链表头部,不要移动,作为返回使用。
    3. 通过对比两个结点的值,从而判断新建的头节点的下一个结点指向谁;
    4. 在对比过程中,如何有其中一个结点已指向链表尾部,那把另外一个链表直接接入新的链表中。
    /**
     * 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 *data= new ListNode(1);    //动态内存分配
            ListNode *result=data;
            while (l1 != NULL && l2 != NULL)
            {
                if (l1->val > l2->val)
                {
                    data->next=l2;
                    l2=l2->next;
                }
                else 
                {
                    data->next=l1; 
                    l1=l1->next;
                }
                data=data->next;
            }
            
            if (l2==NULL)
                data->next = l1;
            else 
                data->next=l2;
            return result->next;
        }
    };
    

    递归方法:

    class Solution {
    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;
            }
            l2->next = mergeTwoLists(l1, l2->next);
            return l2;
        }
    };
    
  • 相关阅读:
    检测一个对象方法是否存在
    非堵塞 延迟脚本 高性能
    移动开发 相关 备忘
    元素透明 渐变函数
    cookie
    media query 单位
    前端入门可参考《如何教会非计算机专业的女友写代码》
    JQ判断复选框是否选中
    聊天记录
    JS获取文本值
  • 原文地址:https://www.cnblogs.com/Tavi/p/12514022.html
Copyright © 2011-2022 走看看