回 帖 发 新 帖 刷新版面

主题:关于单链表删除的算法

无关结点单链表删除第i个结点的算法和有头结点单链表删除第i个结点的算法有什么不同。
  可不可以给一个关于无头结点单链表删除第i个结点的算法。
  谢谢!!!
 有头结点的单链表删除的算法是这样的:
int LinkDelete(LinkList *L,int i,elemtype *s)
{
    LinkList *p,*q;
    int j=0;
    p=L;
    while(p->next!=null&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(p->next==null)
        return 0;
    q=p->next;
    p->next=q->next;
    *s=q->data;
    free(q);
    return (1);
}
  有谁知道无头结点的单链表删除的算法呀?
  请帮帮忙吧!!
  谢谢!!!

回复列表 (共5个回复)

沙发


区别在于删除首元结点的情况,自己考虑一下吧。有头结点方便操作。

板凳

到这个网站去看看,有很多算法的源程序
算法源码吧 [url=http://www.sfcode.cn/]http://www.sfcode.cn/[/url]

3 楼

Thank you!

4 楼


无头结点的删除确实麻烦些,稍不注意就出错。下面是我前段时间写的删除代码,希望有所帮助。
void single_link_list::del_first_node()
{
    if(size == 0){}
    else if (size == 1)
    {
        delete pHead;
        pHead = 0;
        size--;
    }
    else
    {
        node* pDel = pHead;        
        pHead = pHead->next;
        delete pDel;
        size--;
    }
}
void single_link_list::del_NotFirst_node(node* pDel_prior)
{
    node* pDel = pDel_prior->next;
    pDel_prior->next = pDel->next;
    delete pDel;
    size--;
}
不过这是分开写的,当然也可以把它整和到一个函数中,再写个通用的删除函数,加些条件调用这两个函数就行了

5 楼

thank you

我来回复

您尚未登录,请登录后再回复。点此登录或注册