当前位置:首页 » 《随便一记》 » 正文

【LeetCode】剑指 Offer(18)

29 人参与  2023年04月08日 14:09  分类 : 《随便一记》  评论

点击全文阅读


目录

题目:剑指 Offer 35. 复杂链表的复制 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


题目:剑指 Offer 35. 复杂链表的复制 - 力扣(Leetcode)

题目的接口:

/*// Definition for a Node.class Node {public:    int val;    Node* next;    Node* random;        Node(int _val) {        val = _val;        next = NULL;        random = NULL;    }};*/class Solution {public:    Node* copyRandomList(Node* head) {    }};

解题思路:

一开始先判断一下链表是否为空,

如果为空,直接返回空就行。

接下来是思路:

我的思路是通过原链表再复制一个链表:

 所以我们的第一步就是循环创建一个链表,

接在原链表上,如上图,

然后,

第二步是将原链表的random指针同样复制到新的链表上,

(改random的图我懒得画了,如果感兴趣可以自己画一画)

最后一步就是将新的链表独立出来,

再让原链表恢复,如下图:

 最后再返回新的链表的头结点即可。

代码如下:

代码:

/*// Definition for a Node.class Node {public:    int val;    Node* next;    Node* random;        Node(int _val) {        val = _val;        next = NULL;        random = NULL;    }};*/class Solution {public:    Node* copyRandomList(Node* head) {        //判断链表是否为空        if(!head)        {            return nullptr;        }        //复制原链表        Node* cur = head;        while(cur)        {            //new一个新节点,并初始化val            Node* copy = new Node(cur->val);            copy->next = cur->next;            cur->next = copy;            cur = copy->next;        }        //复制原链表的指针        cur = head;        while(cur)        {            //如果randam是指向空指针就不用管(因为原本就是空)            if(cur->random)            {                cur->next->random = cur->random->next;            }            cur = cur->next->next;        }        //将原链表还原,将新链表独立出来        Node* newhead = head->next;        Node* prev = head;        cur = newhead;        while(cur->next)        {            //还原原链表            prev->next = prev->next->next;            prev = prev->next;            //独立新链表            cur->next = cur->next->next;            cur = cur->next;        }        //新链表的尾        prev->next = nullptr;        //返回新链表的头        return newhead;    }};

过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。


点击全文阅读


本文链接:http://zhangshiyu.com/post/58881.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1