小说网站如何做书源,一女被多男做的视频网站,重庆十大房地产公司,台州椒江网站建设公司. - 力扣#xff08;LeetCode#xff09; 本题思路#xff1a;
首先注意到随机链表含有random的指针#xff0c;这个random指针指向是随机的#xff1b;先一个一个节点的拷贝#xff0c;并且把拷贝的节点放在拷贝对象的后面#xff0c;再让拷贝节点的next指向原链表拷贝…. - 力扣LeetCode 本题思路
首先注意到随机链表含有random的指针这个random指针指向是随机的先一个一个节点的拷贝并且把拷贝的节点放在拷贝对象的后面再让拷贝节点的next指向原链表拷贝对象的下一个节点这样做的目的是实现拷贝节点的插入即拷贝好的节点都放在原链表两个节点之间
实现完拷贝节点的插入是为了实现拷贝节点random的指向如果原链表拷贝对象的random指向为NULL那么拷贝节点的random指向也置为NULL若是拷贝对象的random指向不为NULL那么就让拷贝节点的random指向拷贝对象的random的next解释为什么要这样假设现在要实现这个链表中一个拷贝节点的random指向已知其他拷贝对象的next指向的就是拷贝节点要实现random指向的这一个节点要找到和它拷贝对象一样的random指向如何找到只需要让这个拷贝节点的random指向它自己拷贝对象的random的next这个被指向的拷贝节点就是原链表中这个要实现random指向的拷贝节点的拷贝对象的的random的next指向的拷贝节点
最后再进行尾插操作让拷贝节点形成一条新的链表并且还原原链表
/*** Definition for a Node.* struct Node {* int val;* struct Node *next;* struct Node *random;* };*/
typedef struct Node Node;
struct Node* copyRandomList(struct Node* head) {Node* curhead;Node* nextNULL;Node* copyNULL;while(cur){nextcur-next;copy(Node*)malloc(sizeof(Node));copy-nextnext;copy-valcur-val;cur-nextcopy;curnext;}//拷贝节点的插入curhead;while(cur){copycur-next;nextcopy-next;if(cur-randomNULL){copy-randomNULL;}else{copy-randomcur-random-next;}curnext;}拷贝节点random的指向实现curhead;Node* copyhead,*copytail;copyheadcopytail(Node*)malloc(sizeof(Node));copyhead-val-1;copyhead-nextcopyhead-randomNULL;while(cur){copycur-next;nextcopy-next;copytail-nextcopy;copytailcopytail-next;cur-nextnext;curnext;}//拷贝节点尾插变成新的要求的链表还原成原链表Node* rslcopyhead-next;free(copyhead);copyheadNULL;return rsl;}