注册 登录
编程论坛 数据结构与算法

请教高手,指出错误,感谢啦??

迢迢菜 发布于 2014-03-28 20:38, 429 次点击
求两个链表中元素的并集,程序可能有些啰嗦,如果有简洁的话,求指导啦
linklist *Union(linklist *la,linklist *lb)
{linklist *head,*pc,*p,*q,*s,*temp,*t;
head=la;
p=head;
pc=head;
q=lb;
temp=(linklist*)malloc(sizeof(linklist));
temp->next=NULL;
t=temp;
while(pc->next!=Null)
{pc=pc->next;}
while(q!=Null)
{
 if(p->data!=q->data)
 {p=p->next;
  if(p==pc->next)
  {s=(linklist*)malloc(sizeof(linklist));
   s->data=q->data;
   t->next=s;
   t=t->next;
   q=q->next;
   p=la->next;
   /*la=la->next;*/}
  }
  else{
  p=p->next;
  q=q->next;}
}
pc->next=temp->next;
t->next=Null;
return(head) ;
}
2 回复
#2
yuccn2014-03-30 14:00
如果传入的a 为null,那么程序就带出一个null指针了
#3
yuccn2014-03-30 14:11
linklist *find(linklist *la,int data)
{
    while (la != NULL) {
        if (la->data == data) {
             return la;
        }
   
        la = la->next;
    }
   
    return NULL
}

linklist *Union(linklist *la,linklist *lb)
{
    // 如果la 为NULL,直接return lb,没有必要合并   
    if (la == NULL) {
        return lb;
    }
   
    linklist *head = la;
    linklist *tail = la;

//tail 指向最后一项
    while (tail->next != NULL) {
        tail=tail->next;
    }
   
    linklist *bTraver = lb;
   
    while (bTraver != NULL) {
        if(find(head, bTraver->data) == NULL) { // 没有找到,则在末尾增加一项
            tail->next = (linklist*)malloc(sizeof(linklist));
            tail = tail->next;
            
            tail->data = bTraver->data;
            tail->next = NULL;
        }
        
        bTraver = bTraver->next;
    }
   
    return head;
}

没有运行过,大体是这样
1