c语言每日一练

题目: 已知一个有序单链表L(允许出现值域重复的节点),设计一个高效的算法删除值域重复的节点,并分析时间复杂度;
解:
我的做法:


void deletecommom(Linklist L){
    Linklist pre, p;
    p=L->next;
    pre=L;
    while( p!=NULL){
        if( p->data < p->next->data ){
            p=p->next;
        }else{
            pre=p->next;
            p->next=pre->next;
            free(pre);
        }
    }
    return 0;
}
// 时间复杂度为L的长度;

我朋友的做法:

void delete(LinkList L)//删除有序链表中重复的节点
{
    LinkList p, q;
    p=L->next;
    q=p->next;
    while( q!=NULL )
    {
        if( p->data==q->data )
        {
            p->next=q->next;
            free(q);
            q=p->next;
        }else if(p->data<q->data)
        {
            p=q;
            q=p->next;
        }
    }
}//时间复杂度为O(n);

你可能感兴趣的:(那些年我开始码的代码)