博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
复杂链表的复制
阅读量:5805 次
发布时间:2019-06-18

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

题目描述

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
 
1、复制每个节点,如:复制节点A得到A1,将A1插入节点A后面
 
2、遍历链表,A1->random = A->random->next;
 
3、将链表拆分成原链表和复制后的链表
 
代码:
RandomListNode* Clone(RandomListNode* pHead)    {        if(pHead == NULL)             return NULL;        RandomListNode* current = pHead;        //生成链表 next指针        while(current)        {            RandomListNode *node = new RandomListNode(current->label);            node->next = current->next;            current->next = node;            current = node->next;        }        //添加random指针        current = pHead;        while(current)//这里的判断条件要是current 不能为current->next 因为current最后为空时,current->next就会崩。               //如果current 存在,则current一定会有next。所以判断current即可。        {            if(current->random)                current->next->random = current->random->next;            current = current->next->next;        }        //拆分        current = pHead;        RandomListNode* tmp ;        RandomListNode* res = pHead->next;//返回的复制链表的头        while(current->next)        {            tmp = current->next;            current->next = tmp->next;            current = tmp;        }        return res;    }

 

 
 
 

转载于:https://www.cnblogs.com/Lune-Qiu/p/9179050.html

你可能感兴趣的文章
(干货)Linux学习资源推荐
查看>>
蓝图(Blueprint)详解
查看>>
Spark之SQL解析(源码阅读十)
查看>>
Android图片添加水印图片并把图片保存到文件存储
查看>>
C#字符串的不变性
查看>>
前端路由简介以及vue-router实现原理
查看>>
比特币系统采用的公钥密码学方案和ECDSA签名算法介绍——第二部分:代码实现(C语言)...
查看>>
分享15款很实用的 Sass 和 Compass 工具
查看>>
AMD优势: 与众不同 选择丰富
查看>>
玩转高性能超猛防火墙nf-HiPAC
查看>>
简单按日期查询mysql某张表中的记录数
查看>>
自动化部署之jenkins发布PHP项目
查看>>
C/C++编程可用的Linux自带工具
查看>>
如何判断webview是不是滑到底部
查看>>
Raptor实践2——控制结构
查看>>
Smartisan OS一步之自定义拖拽内容
查看>>
海贼王十大悲催人物
查看>>
org.hibernate.MappingException: No Dialect mapping for JDBC type: -1 搞定!
查看>>
热点热词新闻资讯API开放接口(永久免费开放)
查看>>
8.1_Linux习题和作业
查看>>