求大神编一程序,谢啦~~单链表的操作 1)键盘输入n,建立长度为n的单链表并输出

2)键盘输入x,在单链表中查找值为x的结点并删除后,输出链表...
2026年09月27日 11:43
有1个网友回答
网友(1):

# include
# include
typedef struct Node
{
int data;
struct Node *pNext;
} NODE, *PNODE;
PNODE creat_node();
void disp_node(PNODE);
bool insert_node(PNODE, int, int);
bool delete_node(PNODE, int, int*);
bool find_node(PNODE, int, int*);
bool empty_node(PNODE);
bool inversion_node(PNODE);
int main (void)//主函数
{
int vale;
PNODE pHead;
pHead = creat_node();
disp_node(pHead);
insert_node(pHead, 4, 10);//在第四个节点位置插入值为10的节点
disp_node(pHead);
delete_node(pHead, 3, &vale);//删除第三个节点
disp_node(pHead);
find_node(pHead, 5, &vale);
inversion_node(pHead);
return 0;
}
PNODE creat_node()//按要求建立单链表的
{
int i;
int num;
PNODE pHead;
pHead = (PNODE)malloc(sizeof(NODE));
if(pHead == NULL)
{
printf("动态内存分配失败!");
exit(-1);
}
PNODE pTail;
pTail = pHead;
pTail->pNext = NULL;
PNODE pNew;
printf("请输入你要创建链表元素的个数:");
scanf("%d", &num);
for(i = 0; i < num; ++i)
{
pNew = (PNODE)malloc(sizeof(NODE));
if(pNew == NULL)
{
printf("动态内存分配失败!");
exit(-1);
}
printf("请给第%d个链表元素赋值:", i+1);
scanf("%d", &pNew->data);
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
printf("\n\n");
return pHead;
}
void disp_node(PNODE pHead)//显示每个节点的内容
{
PNODE p;
p = pHead;
while(p->pNext != NULL)
{
p = p->pNext;
printf("%4d", p->data);
}
printf("\n");
return;
}
bool insert_node(PNODE pHead, int pos, int vale)//插入节点
{
PNODE p;
p = pHead;
int i = 0;
while(p != NULL && i < pos-1)
{
p = p->pNext;
++i;
}
if(p == NULL || i < pos -1)
{
return false;
}
PNODE pNew;
pNew = (PNODE)malloc(sizeof(NODE));
if(pNew == NULL)
{
printf("动态内存分配失败!");
exit(-1);
}
pNew->data = vale;
pNew->pNext = p->pNext;
p->pNext = pNew;
printf("\n");
return true;
}
bool delete_node(PNODE pHead, int pos, int *vale)//删除节点, pos 表示删除节点的位置,vale表示删除的值
{
int i = 0;
PNODE p;
p = pHead;
while(p->pNext != NULL && i < pos-1)
{
p = p->pNext;
++i;
}
if(p->pNext == NULL || i < pos-1)
{
return false;
}
PNODE r;
r = p->pNext;
*vale = r->data;
p->pNext = r->pNext;
free(r);

return true;
}
bool empty_node(PNODE pHead)//判断链表是否为空
{
if(pHead->pNext == NULL)
{
return true;
}
return false;
}
bool find_node(PNODE pHead, int pos, int *vale)//按要求查找链表中的节点值
{
int i = 0;
PNODE p;
p = pHead;
while(p->pNext != NULL && i < pos-1)
{
p = p->pNext;
++i;
}
if(p->pNext == NULL || i < pos-1)
{
return false;
}
*vale = p->pNext->data;

return true;
}