前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang刷leetcode 链表(4)复制带随机指针的链表

golang刷leetcode 链表(4)复制带随机指针的链表

作者头像
golangLeetcode
发布2022-08-02 15:56:38
2840
发布2022-08-02 15:56:38
举报
文章被收录于专栏:golang算法架构leetcode技术php

给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。

要求返回这个链表的深拷贝。

示例:

输入:

代码语言:javascript
复制
{"$id":"1","next":{"$id":"2","next":null,"random":{"$ref":"2"},"val":2},"random":{"$ref":"2"},"val":1}

解释:
节点 1 的值是 1,它的下一个指针和随机指针都指向节点 2 。
节点 2 的值是 2,它的下一个指针指向 null,随机指针指向它自己。

提示:

  1. 你必须返回给定头的拷贝作为对克隆列表的引用。

解题技巧:

1,因为random指针的存在,所以copy的时候如何定位random是个问题,所以简单方法在原链表每个位置后面插入一个元素。

2,由于random可能指向前面的指针,所以复制完之前不能拆解

3,注意边界条件,对于指针类题目,一定要判断空情况

代码语言:javascript
复制
/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* next;
    Node* random;

    Node() {}

    Node(int _val, Node* _next, Node* _random) {
        val = _val;
        next = _next;
        random = _random;
    }
};
*/
class Solution {
public:
    Node* copyRandomList(Node* head) {
       Node* h=NULL;
        Node* t=NULL;
        Node* cur=NULL;
        cur=head;
       while(cur!=NULL){
            t=cur->next;
            cur->next=new Node(cur->val,t,NULL);
           cur=t;
       }
    
        cur=head;
        if (cur==NULL){
            return NULL;
        }
        h=cur->next;
        t=h;
         while(cur!=NULL){
             if (cur->random!=NULL){
             t->random=cur->random->next;
             }
             cur=t->next;
             if (cur!=NULL){
                  t=cur->next;
             }
         }
        
        cur=head;
        h=cur->next;
        t=h;
        while(cur!=NULL){
              cur->next=t->next;
               cur=cur->next;
               if (cur!=NULL){
                 t->next=cur->next;
                 t=t->next;
               }
         }

        return h;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 golang算法架构leetcode技术php 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档