博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer】面试题26:复杂链表的复制
阅读量:5025 次
发布时间:2019-06-12

本文共 1728 字,大约阅读时间需要 5 分钟。

题目:

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。

思路:

复制自身到下一个结点;

设置新结点的random指针;

分离链表。

注意:判断输入参数,只需要判断是不是空指针就行了。(之前判断当只有一个结点时直接返回。。。那全部直接返回输入参数就是了~~~)

代码:

/*struct RandomListNode {    int label;    struct RandomListNode *next, *random;    RandomListNode(int x) :            label(x), next(NULL), random(NULL) {    }};*/class Solution {public:    RandomListNode* Clone(RandomListNode* pHead)    {        //if(pHead==NULL || pHead->next==NULL)  return pHead;  当有一个结点的时候,不能直接返回啊,要复制~~        if(pHead==NULL)  return NULL;                copy(pHead);        setNewNodeRandom(pHead);        RandomListNode *res=splice(pHead);                return res;    }private:    void copy(RandomListNode *pHead)    {        while(pHead!=NULL)        {            RandomListNode *newnode=new RandomListNode(pHead->label);            newnode->next=pHead->next;            //newnode->random=pHead->random; 新结点的random指针应先不设置            RandomListNode *nextp=pHead->next;//原来的next结点            pHead->next=newnode;//指向新结点            pHead=nextp;        }    }        void setNewNodeRandom(RandomListNode *pHead)    {        while(pHead!=NULL)        {            RandomListNode *nextp=pHead->next;            nextp->random=pHead->random;            pHead=nextp->next;        }    }        RandomListNode* splice(RandomListNode *pHead)    {        RandomListNode *newHead=pHead->next;        RandomListNode *head=newHead;        while(newHead->next!=NULL)        {            pHead->next=newHead->next;            pHead=newHead->next;                        newHead->next=pHead->next;            newHead=pHead->next;        }        pHead->next=NULL;                return head;    }};

 

转载于:https://www.cnblogs.com/buxizhizhou/p/4706130.html

你可能感兴趣的文章
vs2013编译qt程序后中文出现乱码
查看>>
【转】IOS数据库操作SQLite3使用详解
查看>>
Android官方技术文档翻译——ApplicationId 与 PackageName
查看>>
设计网站大全
查看>>
JVM CUP占用率过高排除方法,windows环境
查看>>
【转】JAVA字符串格式化-String.format()的使用
查看>>
【转】ButterKnife基本使用--不错
查看>>
【转】VS2012编译出来的程序,在XP上运行,出现“.exe 不是有效的 win32 应用程序” “not a valid win32 application”...
查看>>
函数中关于const关键字使用的注意事项
查看>>
微信架构(转)
查看>>
Web项目中的路径问题
查看>>
js随机数的取整
查看>>
关于解析漏洞
查看>>
十大经典预测算法(六)---集成学习(模型融合算法)
查看>>
用php做一个简单的注册用户功能
查看>>
一款基于css3的3D图片翻页切换特效
查看>>
Feign使用Hystrix无效原因及解决方法
查看>>
Sizeof与Strlen的区别与联系
查看>>
hadoop2.2.0_hbase0.96_zookeeper3.4.5全分布式安装文档下载
查看>>
Flutter 贝塞尔曲线切割
查看>>