zoukankan      html  css  js  c++  java
  • 剑指Offer-16.合并两个排序的链表(C++/Java)

    题目:

    输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

    分析:

    可以用一个新的节点,来去比较两个单调递增的链表当前节点的值,如果p1当前的值小于p2,则新的节点的next=p1,p1移到下一个节点,新的节点p也要移动到下一个节点。

    当然也可以用递归来做。C++常规做法,Java递归实现。

    程序:

    C++

    class Solution {
    public:
        ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
        {
            if(pHead1 == nullptr)
                return pHead2;
            if(pHead2 == nullptr)
                return pHead1;
            ListNode resHead(0);
            ListNode* p = &resHead;
            while(pHead1 && pHead2){
                if(pHead1->val < pHead2->val){
                    p->next = pHead1;
                    pHead1 = pHead1->next;
                }
                else{
                    p->next = pHead2;
                    pHead2 = pHead2->next;
                }
                p = p->next;
            }
            if(pHead1)
                p->next = pHead1;
            if(pHead2)
                p->next = pHead2;
            return resHead.next;
        }
    };

    Java

    public class Solution {
        public ListNode Merge(ListNode list1,ListNode list2) {
            if(list1 == null) return list2;
            if(list2 == null) return list1;
            if(list1.val < list2.val){
                list1.next = Merge(list1.next, list2);
                return list1;
            }
            else{
                list2.next = Merge(list1, list2.next);
                return list2;
            }
        }
    }
  • 相关阅读:
    ASP.NET Page 那点事
    .Net项目分层与文件夹结构大全(最佳架子奖,吐槽奖,阴沟翻船奖揭晓)
    bash_profile和.bashrc的区别
    limits.conf生效问题
    有关snprintf返回值
    snprintf和strncpy对比
    Hadoop技术论坛
    Ubuntu系统微调
    interpreter和state模式的区别
    ANTLR实现的SQL解析器 OQL
  • 原文地址:https://www.cnblogs.com/silentteller/p/11886551.html
Copyright © 2011-2022 走看看