算法3:程序21-22

程序21:拷贝含随机指针的链表

#include<iostream> //拷贝含随机指针的链表
using namespace std;
#include<hash_map>

struct Node
{
    int value;
    Node*next;
    Node*random;
    Node(int val)
    {
        value=val;
        next=NULL;
        random=NULL;
    }
};

Node* copyListWithRand1(Node *head)  //未完成
{
    if(head==NULL)
    {
        return NULL;
    }
}
Node* copyListWithRand2(Node *head)  //额外空间为O(1)
{
    if(head==NULL)
    {
        return NULL;
    }
    Node* cur=head;
    Node*next=NULL;
    while (cur!=NULL)
    {
        next=cur->next;
        cur->next=new Node(cur->value); //在new的同时将值拷了进去
        cur->next->next=next;
        cur=next;
    }
    cur=head;
    Node*copy=NULL;
    while(cur!=NULL)
    {
        copy=cur->next;
        copy->random=cur->random==NULL?NULL:cur->random->next;
        cur=cur->next->next;
    }

    cur=head;
    Node*res=cur->next;
    while(cur!=NULL)
    {
        next=cur->next->next;
        copy=cur->next;
        cur->next=next;
        copy->next=next==NULL?NULL:next->next;
        cur=next;
    }
    return res;

};
int main()
{

    Node *head1 = NULL;
    head1=new Node(1);
    head1->next=new Node(2); //一定要new;用类似于有参构造初始化
    Node*res=copyListWithRand2(head1);
    cout<<res->value<<endl;
    cout<<head1->next->random;

    return 0;
}

程序22:两个单链表相交的一系列问题

#include<iostream> //两个单链表相交的一系列问题
using namespace std;

struct Node
{
    int value;
    Node *next;
    Node(int val)
    {
        value=val;
        next=NULL;
    } 
};


Node* getLoopNode(Node* head)
{
    if(head==NULL||head->next==NULL||head->next->next==NULL)
    {
        return NULL;
    }
    Node* n1=head->next;
    Node* n2=head->next->next;
    while(n1!=n2)
    {
        if(n1==NULL||n2==NULL)
        {
            return NULL;
        }
        n1=n1->next;
        n2=n2->next->next;
    }
    n2=head;
    while (n1!=n2)
    {
        n1=n1->next;
        n2=n2->next;
    }
    return n1;
}

Node* noLoop(Node* head1,Node* head2)
{
    if(head1==NULL||head2==NULL)
    {
        return NULL;
    }
    int n=0;
    Node* cur1=head1;
    Node* cur2=head2;
    while (cur1!=NULL)
    {
        n++;
        cur1=cur1->next;
    }
    while (cur2!=NULL)
    {
        n--;
        cur2=cur2->next;
    }
    if(cur1!=cur2)
    {
        return NULL;
    }    
    cur1=n>0?head1:head2;
    cur2=cur1==head1?head2:head1;
    n=abs(n);
    while (n!=0)
    {
        cur1=cur1->next;
        n--;
    }
    while (cur1!=cur2)
    {
        cur1=cur1->next;
        cur2=cur2->next;
    }
    return cur1;
}
Node* bothLoop(Node* head1,Node* loop1,Node* head2,Node* loop2)
{
    Node* cur1=NULL;
    Node* cur2=NULL;
    if(loop1==loop2)
    {
        cur1=head1;
        cur2=head2;
        int n=0;
        while (cur1!=loop1)
        {
            n++;
            cur1=cur1->next;
        }
        while (cur2!=loop2)
        {
            n--;
            cur2=cur2->next;
        }
        cur1=n>0?head1:head2;
        cur2=cur1==head1?head2:head1;
        n=abs(n);
        while (n!=0)
        {
            cur1=cur1->next;
            n--;
        }
        while (cur1!=cur2)
        {
            cur1=cur1->next;
            cur2=cur2->next;
        }
        return cur1;      
    }
    else
    {
        cur1=loop1->next;
        while(cur1!=loop1)
        {
            if(cur1==loop2)
            {
                return loop2;
            }
            cur1=cur1->next;
        }
        return NULL;
    }

}

Node* getIntersectNode(Node* head1,Node* head2)
{
    if(head1==NULL||head2==NULL)
    {
        return NULL;
    }
    Node* loop1=getLoopNode(head1);
    Node* loop2=getLoopNode(head2);
    if(loop1==NULL&&loop2==NULL)
    {
        return noLoop(head1,head2);
    }
    if(loop1!=NULL&&loop2!=NULL)
    {
        return bothLoop(head1,loop1,head2,loop2);
    }
    return NULL;
}

int main()
{
    Node *head1=NULL;
    head1=new Node(1);
    Node* cur=new Node(2);
    cout<<cur<<endl;
    head1->next=cur;

    Node* head2=new Node(3);
    head2->next=cur;

    cout<<getIntersectNode(head1,head2);

    return 0;
}
全部评论

相关推荐

03-06 20:09
贵州大学 Java
King987:你这个学历找个中大厂刷实习经历都是可以的,但是项目要有亮点才行,这个什么外卖就不要做了,去找找最新的项目,至少涉及高并发或者是新型的AI技术mcp rag啥的 ,我在出简历点评,但是你这个没什么好点评的,内容太少,而且含金量太低。自己改一改吧,或者看一下我的项目地址中,那里有大厂最近做过的实习项目
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
8028次浏览 74人参与
# 你的实习产出是真实的还是包装的? #
1491次浏览 37人参与
# 米连集团26产品管培生项目 #
5291次浏览 213人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7248次浏览 39人参与
# 简历第一个项目做什么 #
31424次浏览 318人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
186682次浏览 1117人参与
# MiniMax求职进展汇总 #
23486次浏览 305人参与
# 研究所笔面经互助 #
118827次浏览 577人参与
# 重来一次,我还会选择这个专业吗 #
433189次浏览 3924人参与
# 简历中的项目经历要怎么写? #
309795次浏览 4174人参与
# 面试紧张时你会有什么表现? #
30448次浏览 188人参与
# AI时代,哪些岗位最容易被淘汰 #
63077次浏览 769人参与
# 正在春招的你,也参与了去年秋招吗? #
362963次浏览 2635人参与
# 你怎么看待AI面试 #
179634次浏览 1202人参与
# 职能管理面试记录 #
10765次浏览 59人参与
# 网易游戏笔试 #
6418次浏览 83人参与
# 腾讯音乐求职进展汇总 #
160504次浏览 1107人参与
# 校招笔试 #
468957次浏览 2960人参与
# 把自己当AI,现在最消耗你token的问题是什么? #
7113次浏览 156人参与
# 你觉得通信/硬件有必要实习吗? #
155421次浏览 1065人参与
# 小红书求职进展汇总 #
227003次浏览 1357人参与
# 从哪些方向判断这个offer值不值得去? #
56719次浏览 357人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务