编写算法:在带头结点的单链表中删除第i个位置的元素。 已知单链表的结点定义如下: typedef struct LNode{ ElemType data; //数据域 struct LNode *next; //指针域 }LNode,*LinkList; 函数定义:Status ListInsert_L(LinkList &L,int i) {......}
时间: 2024-01-30 16:03:32 浏览: 90
3-2 试编写一个算法,在带表头结点的单链表中寻找第i个结点.doc
算法如下:
1. 判断链表是否为空,如果为空则返回错误。
2. 判断i的值是否合法,如果不合法则返回错误。
3. 定义指针p和q,p指向头结点,q指向待删除节点的前驱节点。
4. 循环遍历链表,直到q指向第i-1个节点。
5. 判断q是否指向了最后一个节点,如果是则返回错误。
6. 定义指针r,r指向待删除节点。
7. 修改q的next指针,使其指向r的下一个节点。
8. 释放r节点。
9. 返回成功。
函数代码如下:
Status ListDelete_L(LinkList &L, int i) {
if (L == NULL || L->next == NULL || i < 1) {
return ERROR;
}
LNode *p = L;
int j = 0;
while (p != NULL && j < i - 1) {
p = p->next;
j++;
}
if (p == NULL || p->next == NULL) {
return ERROR;
}
LNode *q = p->next;
p->next = q->next;
free(q);
return OK;
}
阅读全文