【剑指Offer】复杂链表的复制
发布日期:2022-02-10 08:55:14
浏览次数:31
分类:技术文章
本文共 1512 字,大约阅读时间需要 5 分钟。
题目
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。
思路
拿到题的思路就是hash表+两次遍历,但看到书上有更能节省空间的办法后就直接写了书上的。
翻了个错误就是奇偶链表节点的处理上,还是不能拿个整数做%2操作来判断,需要指针处理,因为最后一个空节点不复制。
总的来说就是三个方法顺序操作一下。
代码
/*// Definition for a Node.class Node {public: int val; Node* next; Node* random; Node(int _val) { val = _val; next = NULL; random = NULL; }};*/class Solution {public: Node* copyRandomList(Node* head) { if(head == NULL){ return NULL; } copyList(head); changeptr(head); return GetNewList(head); } void copyList(Node* head){ Node* p = head; while(p != NULL){ Node* pclone = new Node(p->val); Node* p1 = p->next; p->next = pclone; pclone->next = p1; p=pclone->next; } } void changeptr(Node* head){ Node* p = head; while(p != NULL){ Node* pnew = p->next; if(p->random != NULL){ pnew->random = p->random->next; } p=pnew->next; } } Node* GetNewList(Node* head){ Node* p = head; Node* pnewhead = NULL; Node* pnew = NULL; pnewhead = p->next; pnew = p->next; p->next = pnewhead->next; p = p->next; while(p != NULL){ pnew->next = p->next; pnew = p->next; p->next = pnew->next; p=p->next; } return pnewhead; }};
转载地址:https://blog.csdn.net/hanmin822/article/details/105699205 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月08日 21时27分24秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【面试篇】Java容器面试大集合
2019-04-26
【Linux篇】Linux常用命令之性能优化
2019-04-26
【Leetcode刷题篇】leetcode240 搜索二维矩阵II
2019-04-26
【Leetcode刷题篇】Leetcode714 买卖股票的最佳时机含手续费
2019-04-26
【Leetcode刷题篇】leetcode123 买卖股票的最佳时机 III
2019-04-26
【Leetcode刷题篇】leetcode188 买卖股票的最佳时机IV
2019-04-26
【Leetcode刷题篇/面试篇】经典动态规划-买卖股票问题总结汇总
2019-04-26
【Java锁体系】五、隐式锁和显式锁的区别(Synchronized和Lock的区别)
2019-04-26
【Java锁体系】七、JMM内存模型详解
2019-04-26
【Java锁体系】八、MESI缓存一致性协议讲解
2019-04-26
【面试篇】Java锁体系
2019-04-26
【面试篇】JVM体系
2019-04-26
【Leetcode刷题篇】leetcode406 根据身高重建队列
2019-04-26
【Leetcode刷题篇】leetcode581 最短无序连续子数组
2019-04-26
【Leetcode刷题篇】leetcode538 把二叉搜索树转换为累加树
2019-04-26
【多线程与高并发】线程的优先级是怎么回事?
2019-04-26
【多线程与高并发】Java守护线程是什么?什么是Java的守护线程?
2019-04-26
【Leetcode刷题篇/面试篇】-前缀树(Trie)
2019-04-26
【Leetcode刷题篇】leetcode337 打家劫舍III
2019-04-26