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

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

1 //复杂链表的复制 2 //输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 3 // 4 //思路:拷贝链表的结点,需要根据已知链表的结点的值,创建一个新的结点
5 struct RandomListNode 6 { 7     int label; 8     struct RandomListNode* next, *random; 9     RandomListNode(int x):label(x), next(NULL), random(NULL)10     {11 12     }13 };14 class Solution15 {16 public:17     RandomListNode* Clone(RandomListNode* pHead)18     {19         if (pHead == NULL)20         {21             return NULL;22         }23         ////第一步,创建结点然后并复制整个链表的结点---复制链表,需要遍历,因而需要创建链表的头结点24         RandomListNode* pNode=pHead;25         while(pNode != NULL)26         {27             RandomListNode* pCloned = new RandomListNode(pNode->label);28             pCloned->next = pNode->next;29             pNode->next = pCloned;30             pNode = pCloned->next;31         }32          //若原始链表上的结点N的m_pSibling指向S,则它对应的复制结点N'的m_pSibling指向S的下一个结点S'33         //第二步--再次对复制链表进行遍历34         RandomListNode* pNode1 = pHead;35         while(pNode1 != NULL)36         {37             RandomListNode* pCloned = pNode1->next;38             if (pNode1->random != NULL)39             {40                 pCloned->random = pNode1->random->next;41             }42             pNode1 = pCloned->next;43         }44         //第三步,将第二步得到的链表拆成两个链表,即奇数位置和偶数位置45         RandomListNode* pTmp = NULL;46         RandomListNode* pCurrentHead = pHead;47         RandomListNode* pClonedHead = pHead->next;48         //对复制链表进行拆分49         //-首先再循环备份两个链表的头结点,50         //然后循环判断条件就是头结点的下一个结点是否为NULL;51         //先备份下一个要遍历的结点,然后再做操作;再将备份结点改编成当前要处理的结点。52         while(pCurrentHead->next)53         {54             pTmp = pCurrentHead->next;55             pCurrentHead->next = pTmp->next;56             pCurrentHead = pTmp;57         }58         return pClonedHead;59     }60 };

 

转载于:https://www.cnblogs.com/maleyang/articles/7426751.html

你可能感兴趣的文章
OpenCV的配置
查看>>
spring Cache + Redis 开发数据字典以及自定义标签
查看>>
成功连上数据库顿感世界美好许多
查看>>
编程注意2
查看>>
《C++ Primer Plus》第12章 类和动态内存分配 学习笔记
查看>>
javascript中sort()排序方法总结
查看>>
实现聊天界面的代码
查看>>
自己生成一个NDK的浅析
查看>>
Excel数据导入到数据库
查看>>
jQuery最佳实践
查看>>
SELinux FAQ
查看>>
Java中synchronized同步的理解
查看>>
python 数值计算库
查看>>
java 服务重启 js 中被注释代码仍然执行
查看>>
我并不是不闻不问![C#]
查看>>
web前端经典小题
查看>>
AutoCAD如何倒角 倒圆角 倒直角
查看>>
Office PPT中如何插入flash
查看>>
C# Fade Form Effect With the AnimateWindow API Function
查看>>
golang多维数组的切片
查看>>