目录
1.原题链接:
2.结点拆分:
代码实现:
3.提交结果:
4.读书分享:
1.原题链接:
138. 随机链表的复制
2.结点拆分:
①.拷贝各个结点,连接在原结点后面;
②.处理拷贝结点的random:
由图可知,每个拷贝结点都在原结点的后面,那拷贝结点的random结点是不是也在原结点random结点后面?
③.拆解出复制链表:
代码实现:
typedef struct Node Node;
struct Node* copyRandomList(struct Node* head) {
if(head==NULL)
return NULL;
//拷贝结点并连接在原结点后面
Node* cur=head;
while(cur!=NULL)
{
Node* copy=(Node*)malloc(sizeof(Node));
copy->next=NULL;
copy->random=NULL;
copy->val=cur->val;
copy->next=cur->next;
cur->next=copy;
cur=cur->next->next;
}
//处理random结点
cur=head;
while(cur!=NULL)
{
Node* copy=cur->next;
if(cur->random==NULL)//当random结点为空时,特殊处理
copy->random=NULL;
else
copy->random=cur->random->next;
cur=cur->next->next;
}
//拆解复制链表
cur=head;
Node* copyHead=head->next;//保存复制链表的头结点
while(cur!=NULL)
{
Node* copy=cur->next;
Node* next=copy->next;
cur->next=next;
if(next==NULL)//避免引发空指针问题
copy->next=NULL;
else
copy->next=next->next;
cur=next;
}
return copyHead;
}
3.提交结果:
4.读书分享:
《道德经·第四十八章》:
为学日益,为道日损。损之又损,以至于无为。
无为而无不为。
取天下常以无事,及其有事,不足以取天下。
解释:
追求学问天天增益,修行大道日益减损。减损而又减损,最后达到无为的境地。
能够做到无为,就会有所作为。
治理天下必须无所事事,如果经常有所事事,就不能治理天下了。