> 文章列表 > 【快乐手撕LeetCode题解系列】—— 复制带随机指针的链表

【快乐手撕LeetCode题解系列】—— 复制带随机指针的链表

【快乐手撕LeetCode题解系列】—— 复制带随机指针的链表

【快乐手撕LeetCode题解系列】—— 复制带随机指针链表😎

  • 前言🙌
    • 复制带随机指针的链表🙌
      • 画图分析:😍
      • 思路分析:😍
      • 源代码分享:😍
  • 总结撒花💞


追梦之旅,你我同行

   
😎博客昵称:博客小梦
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!

😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘
在这里插入图片描述

前言🙌

    哈喽各位友友们😊,我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下!😘我仅已此文,和大家分享【快乐手撕LeetCode题解系列】—— 复制带随机指针的链表~ 都是精华内容,可不要错过哟!!!😍😍😍

复制带随机指针的链表🙌

题目内容
【快乐手撕LeetCode题解系列】—— 复制带随机指针的链表

画图分析:😍

【快乐手撕LeetCode题解系列】—— 复制带随机指针的链表

思路分析:😍

  • 先认真审题,分析解题思路
  • 这里用到了一个非常奇妙的方法,首先先拷贝对应的原结点,并将他们链接在原结点的后面。
  • 然后设置生成结点的random指针。因为拷贝的结点都在原结点的后面。因此。让copy的random指针都指向cur->random->next。但是要除开一个特殊情况,当cur->random == NULL。则copy->random 也设置为NULL;
  • 最后一步就是将拷贝的结点和原链表解开。这里采用尾插的方式,将其与原链表分开。然后将原链表的指向恢复过来就Ok啦~

源代码分享:😍

struct Node* copyRandomList(struct Node* head) 
{//第一步,拷贝原结点struct Node* cur = head;while(cur){struct Node* copy = (struct Node*)malloc(sizeof( struct Node));copy->val = cur->val;copy->next = cur->next;cur->next = copy;cur = copy->next;}//第二步,设置random指针cur = head;while(cur){struct Node* copy = cur->next;if(cur->random == NULL)copy->random = NULL;elsecopy->random = cur->random->next;cur = copy->next;}//3 解开,恢复cur = head;struct Node* copyHead = NULL;struct Node* copyTail = NULL;while(cur){struct Node* copy = cur->next;struct Node* next = copy->next;if(copyTail == NULL)copyHead = copyTail = copy;else{copyTail->next = copy;copyTail = copyTail->next;} cur->next = next;cur = next;}return copyHead;
}

程序输出结果验证: 😊
【快乐手撕LeetCode题解系列】—— 复制带随机指针的链表

总结撒花💞

   本篇文章旨在分享【快乐手撕LeetCode题解系列】—— 复制带随机指针的链表。希望大家通过阅读此文有所收获!😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘

DNS科普网