在单链表中要删除某一指定的节点,必须找到该节点的

如题所述

第1个回答  2015-07-02
int dellinklist(Linklist L,int x)
{
Linklist p=L->next,q=L,s;
while(p!=NULL)
{
if(p->data==x)
{
s=p->next;
q->next=p->next

free(p);
p=s;
}
else
{
q=p;
p=p->next;
}
return 1;本回答被网友采纳
第2个回答  2019-05-14
直接前驱结点
第3个回答  2016-02-02
实现代码如下:

1、线性表的顺序表示时
Status ListInsert(SqList * L, int i, ElemType e)
{//在L的第i个位置之前插入新的数据元素e,L的长度加1
ElemType * newbase, * q, * p;
if (i<1 || i>(* L).length+1)//i值不合法
{
return ERROR;
}
if ((* L).length >= (* L).listsize)//当前存储空间已满,增加分配
{
if (!(newbase = (ElemType *)realloc((*L).elem,((* L).listsize+LIST_INCREMENT)*sizeof(ElemType))))
{
exit(OVERFLOW);//存储空间分配失败
}
(* L).elem = newbase;//新基址
(* L).listsize += LIST_INCREMENT;//增加存储容量

}
q = (* L).elem + i - 1;//q为插入位置
for (p=(* L).elem+(* L).length-1; p>=q; --p)//在插入位置的元素以及其后的元素后移
{
* (p+1) = * p;
}
* q = e;//插入e
++(* L).length;//表长增加1
return OK;
}

2、线性表的链式表示时
//在带头结点的单链表L的第i个位置之前插入元素e
Status ListInsert(LinkList L,int i,ElemType e)
{
int j = 0;
LinkList p = L,s;
while (p && j<i-1)//寻找第i-1个结点
{
p = p->next;
j++;
}
if (!p || j>i-1)//i<1或者>表长
{
return ERROR;
}
s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;

return OK;}
相似回答