填空补充函数// h为指向单向链表的指针,pos为删除位置,item用于返回被删除结点的前驱 int LinkListDelete(LinkList h, int pos, DataType *item) { PNode p = h, q; int i = 0; while (p->link && i < pos - 1) // 寻找被删结点的前驱 { p = p->link; i++; } if (!p->link || i > pos - 1) // 检查待删除元素的位置是否在链表内 { printf("删除位置不合法!\n"); return 0; } q = p->link; // 删除 ; *item = q->stu; // 返回被删结点 ; // 释放被删除结点 return 1; } // 遍历单链表 void TraverseLinkList(LinkList h) // h为指向单链表的指针 { PNode p = h->link; while (p) { printf("%s,%d\n", ); // 注意中英文标点符号 p = p->link; } printf("\n"); } int main() { LinkList L; int i,pos=1; DataType x; DataType a[4] = {{"Tom",90},{"Lily",87},{"May",92},{"Lucy",78}}; ; // 初始化单链表 for (i=0;i<4;i++) { LinkListInsert(L,pos++,a[i]); } scanf("%d",&pos); LinkListDelete( ); TraverseLinkList(L); return 0; }
时间: 2024-01-09 09:06:10 浏览: 52
对单链表删除前驱结点
3星 · 编辑精心推荐
填空补充函数:
```c
int LinkListDelete(LinkList h, int pos, DataType *item)
{
PNode p = h, q;
int i = 0;
while (p->link && i < pos - 1) // 寻找被删结点的前驱
{
p = p->link;
i++;
}
if (!p->link || i > pos - 1) // 检查待删除元素的位置是否在链表内
{
printf("删除位置不合法!\n");
return 0;
}
q = p->link; // 删除
p->link = q->link; // 修改前驱结点指向
*item = q->stu; // 返回被删结点
free(q); // 释放被删除结点
return 1;
}
// 遍历单链表
void TraverseLinkList(LinkList h) // h为指向单链表的指针
{
PNode p = h->link;
while (p)
{
printf("%s,%d\n", p->stu.name, p->stu.score); // 注意中英文标点符号
p = p->link;
}
printf("\n");
}
int main()
{
LinkList L;
int i,pos=1;
DataType x;
DataType a[4] = {{"Tom",90},{"Lily",87},{"May",92},{"Lucy",78}};
// 初始化单链表
for (i=0;i<4;i++)
{
LinkListInsert(L,pos++,a[i]);
}
scanf("%d",&pos);
LinkListDelete(L,pos,&x);
printf("被删除的结点的前驱为:%s,%d\n", x.name, x.score);
TraverseLinkList(L);
return 0;
}
```
阅读全文