| 发信站: 北邮人论坛 (Tue Apr 26 10:49:11 2011), 站内 struct Node{ Node* next; Node* rand;//rand 指向rand_list中随机的一个Node void* data; } rand_list; void copy( Node** to, Node* from) { Node *p, *np, *next; if (from == NULL) { *to = NULL; return; } // 第一遍:建链,新旧节点交替形成新的单链表 p = from; while (p) { next = p->next; np = new Node; np->data = p->data; np->next = next; p->next = np; p = next; } // 第二遍:赋值,给新节点的随机指针赋值 p = from; while (p) { p->next->rand = p->rand->next; p = p->next->next; } // 第三遍:还原,由一条单链表还原新旧两条单链表 *to = from->next; p = from; np = *to; p->next = np->next; p = np->next; while (p) { np->next = p->next; np = np->next; p->next = np->next; p = np->next; } } |