copy 链表

来源:互联网 发布:unity ugui源码 编辑:程序博客网 时间:2024/06/05 11:33

2,算法题   
struct Node{   
      Node* next;   
      Node* rand;//rand  指向rand_list中随机的一个Node   
      void* data;   
} rand_list;   
      
实现 void copy( Node** to, Node* from);  
  
如果不用辅存,怎么实现? 
-- 
   



发信站: 北邮人论坛 (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; 
     }