首页 > 其他分享 >剑指offer:复杂链表的复制

剑指offer:复杂链表的复制

时间:2022-12-01 19:02:01浏览次数:30  
标签:NULL offer random next 链表 复制 pHead newp RandomListNode


题目描述

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

/*
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){
return NULL;
}

RandomListNode* p=pHead;


while(p){
RandomListNode *newp= new RandomListNode(p->label);

RandomListNode* pNext=p->next;

p->next=newp;

newp->next=pNext;

p=pNext;
}


p=pHead;

while(p){
RandomListNode* newp=p->next;

if(p->random){
newp->random=p->random->next;
}

p=newp->next;
}


//拆分部分很关键!

RandomListNode *newHead=pHead->next;
p=pHead;

while(p->next){

RandomListNode *next=p->next;
p->next=next->next;
p=next;

}

return newHead;
}
};


标签:NULL,offer,random,next,链表,复制,pHead,newp,RandomListNode
From: https://blog.51cto.com/u_15899184/5903622

相关文章

  • 剑指offer:数组中的逆序对
    题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。classSolution{public:intInv......
  • 剑指offer:最小的K个数
    题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。方法一O(n)改变输入,适合小数据classSolution{public:vector<i......
  • 剑指offer:翻转单词顺序列
    题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“s......
  • 删除有序链表中的重复元素(python)
    重复的留下一个def deleteDuplicates(self , head: ListNode) -> ListNode:        # write code here        #空链表        if ......
  • 链表的奇偶重排
    思路:变成数组操作def oddEvenList(self , head: ListNode) -> ListNode:        # write code here        p = head        num......
  • 单链表的排序(python)
    思路:链表最难受的就是不能按照下标访问,只能逐个遍历,那像排序中常规的快速排序、堆排序都不能用了,只能用依次遍历的冒泡排序、选择排序这些。但是这些O(n2)O(n^2)O(n2)复杂......
  • 剑指offer题解C++版
    一,常见数据结构1,数组3-找出数组中重复的数字4-二维数组中的查找5-替换空格29-顺时针打印矩阵leetcode989-数组形式的整数加法leetcode26-删除有序数组中的重复......
  • 单链表每k个一组反转(python)
    题目:将给出的链表中的节点每k 个一组翻转,返回翻转后的链表如果链表中的节点数不是k的倍数,将最后剩下的节点保持原样你不能更改节点中的值,只能更改节点本身。具体做法......
  • 设计链表-LeetCode707 基础题
    LeetCode链接:https://leetcode.cn/problems/design-linked-list/题目:设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val......
  • list 和 dict 的复制
    我们都知道,Python中有两种可变的数据类型:list和dict。这两种数据类型对应的实例也有很多方法可以对自身进行修改,需要注意的是,这里调用修改相关的方法的时候不是返回修改......