zoukankan      html  css  js  c++  java
  • 剑指offer—第三章高质量代码(合并两个排序链表)

    题目:输入员两个递增排序的链表,合并这两个链表并使新的链表中的结点仍然是按照递增排序的。

    思路:首先,定义两个头节点分别为Head1和Head2的链表,然后比较第一个节点的值,如果是Head1->mValue比Head2->mValue小,那么头节点,就是Head1,递归实现后面的节点的排序。

    C++代码:

    #include<iostream>
    using namespace std;
    struct ListNode
    {
        int m_nValue;
        ListNode* m_pNext;
    };
    ListNode* CreateList(int a[],int b)
    {
    
        ListNode* pHead=NULL,*pNode=NULL;
        for(int i=0;i<b;i++)
        {
            ListNode* pNew=new ListNode();
            pNew->m_nValue=a[i];
            pNew->m_pNext=NULL;
            if(pHead==NULL)
            {
                pHead=pNew;
                pNode=pNew;
                
            }
            else
            {
                pNode->m_pNext=pNew;
                pNode=pNode->m_pNext;
            }
        }
        return pHead;
    }
    void PrintList(ListNode* pHead)
    {
        if(pHead==NULL)
        {
            return;
        }
        ListNode* pNode=pHead;
        while(pNode!=NULL)
        {
            cout<<pNode->m_nValue<<" ";
            pNode=pNode->m_pNext;
    
        }
        cout<<endl;
    }
    ListNode* MergeLink(ListNode* Head1,ListNode* Head2)
    {
        ListNode* MergeHead=NULL;
        if(Head1==NULL)
            return Head2;
        if(Head2==NULL)
            return Head1;
        if(Head1==NULL&&Head2==NULL)
            return NULL;
        if(Head1->m_nValue>Head2->m_nValue)
        {
            MergeHead=Head2;
            Head2->m_pNext=MergeLink(Head2->m_pNext,Head1);
        }
        else
        {
            MergeHead=Head1;
            Head1->m_pNext=MergeLink(Head1->m_pNext,Head2);
        }
        return MergeHead;
    }
    void main()
    {
        int a[]={3,4,5,6,8};
        int b[]={1,2,7};
        ListNode* Head1=CreateList(a,5);
        ListNode* Head2=CreateList(b,3);
        PrintList(Head1);
        PrintList(Head2);
        ListNode* Head3=MergeLink(Head1,Head2);
        PrintList(Head3);
        
    }

    Java代码:

    public class MergeLink {
    
        public static class ListNode
        {
            int m_nValue;
            ListNode m_pNext;
        };
        public static ListNode CreateList(int[] a,int b)
        {
    
            ListNode pHead=null,pNode=null;
            for(int i=0;i<b;i++)
            {
                ListNode pNew=new ListNode();
                pNew.m_nValue=a[i];
                pNew.m_pNext=null;
                if(pHead==null)
                {
                    pHead=pNew;
                    pNode=pNew;
                    
                }
                else
                {
                    pNode.m_pNext=pNew;
                    pNode=pNode.m_pNext;
                }
            }
            return pHead;
        }
        public static void PrintList(ListNode pHead)
        {
            if(pHead==null)
            {
                return;
            }
            ListNode pNode=pHead;
            while(pNode!=null)
            {
                
                System.out.print(pNode.m_nValue+" ");
                pNode=pNode.m_pNext;
    
            }
            System.out.println();
        }
        public static ListNode MergeLink(ListNode Head1,ListNode Head2)
        {
            ListNode MergeHead=null;
            if(Head1==null)
                return Head2;
            if(Head2==null)
                return Head1;
            if(Head1==null&&Head2==null)
                return null;
            if(Head1.m_nValue>Head2.m_nValue)
            {
                MergeHead=Head2;
                Head2.m_pNext=MergeLink(Head2.m_pNext,Head1);
            }
            else
            {
                MergeHead=Head1;
                Head1.m_pNext=MergeLink(Head1.m_pNext,Head2);
            }
            return MergeHead;
        }
        public static void main(String[] args)
        {
            int a[]={3,4,5,6,8};
            int b[]={1,2,7};
            ListNode Head1=CreateList(a,5);
            ListNode Head2=CreateList(b,3);
            PrintList(Head1);
            PrintList(Head2);
            ListNode Head3=MergeLink(Head1,Head2);
            PrintList(Head3);
            
        }
    
    }
  • 相关阅读:
    广度优先搜索(一)
    快速幂
    office 2013
    最著名的十大公式
    二分查找的上下界
    双关键字快速排序
    字符串操作
    分治算法练习(二)
    P3119 [USACO15JAN]草鉴定[SCC缩点+SPFA]
    P3225 [HNOI2012]矿场搭建[割点]
  • 原文地址:https://www.cnblogs.com/hupp/p/4577278.html
Copyright © 2011-2022 走看看