4个回答
展开全部
//删除以L为头结点的单链表中值为k的所有结点并输出单链表长度
#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
typedef struct lnode
{
int data;
lnode *next;
}node,*link;
void creatlink(link &L)
{
int a;
link p=L;
printf("输入链表的值:\n");
scanf("%d",&a);
while(a!=0)
{
p=(link)malloc(sizeof(node));
p->data=a;
p->next=L;
L=p;
scanf("%d",&a);
}
}
int length_delete(link &L,int k)
{
int count=1;
link p=L->next;
while(p)
{
if(p->data==k)
{
L->next=p->next;
free(p);
}
printf("%d ",L->data);
L=L->next;
p=L->next;
count++;
}
return count;
}
主函数:
//删除以L为头结点的单链表中值为k的所有结点并输出单链表长度
#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
typedef struct lnode
{
int data;
lnode *next;
}node,*link;
void creatlink(link &L)
{
int a;
link p=L;
printf("输入链表的值:\n");
scanf("%d",&a);
while(a!=0)
{
p=(link)malloc(sizeof(node));
p->data=a;
p->next=L;
L=p;
scanf("%d",&a);
}
}
int length_delete(link &L,int k)
{
int count=1;
link p=L->next;
while(p)
{
if(p->data==k)
{
L->next=p->next;
free(p);
}
printf("%d ",L->data);
L=L->next;
p=L->next;
count++;
}
return count;
}
刚刚现写的,希望能帮到你~:)
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
#include <stdio.h>
#include <stdlib.h>
typedef int ElementType; // 假设数据是int类型的(可以自己更改)
typedef struct table
{
ElementType data;
struct table *next;
}List, Node;
void Error(const char *msg)
{
printf("%s\n", msg);
system("pause");
exit(0);
}
int IsEmpty(const List *L)
{
return L->next==NULL;
}
Node* CreateNode(ElementType X) // 创建值为X的新的结点
{
Node *p = (List*) malloc(sizeof(*p));
if(NULL == p)
Error("No more memory!");
p->data = X;
p->next = NULL;
return p;
}
void Save(const ElementType X, List *L) // 在链表末尾接入值为X的新结点
{
List *p = L;
while(NULL != p->next)
p = p->next;
Node *newNode = CreateNode(X);
p->next = newNode;
}
Node* FindPre(const ElementType X, List *L) // 找到值为X的结点的前驱结点(删除操作需要)
{
List *p = L;
while(NULL != p->next)
{
if(p->next->data == X)
return p;
p = p->next;
}
return NULL;
}
int GetListLength(const List *L) // 获取链表长度
{
int length = 0;
List *p = L->next;
while(p != NULL)
{
++length;
p = p->next;
}
return length;
}
void Delete(const ElementType X, List *L) // 删除链表中值为X的结点
{
int length = GetListLength(L);
printf("Delete data %d\n", X);
while(length--)
{
List *p = L;
Node *pre = FindPre(X, p);
if(NULL == pre)
break;
Node *tmp = pre->next;
pre->next = tmp->next;
free(tmp);
}
}
void PrintList(const List *L) // 打印链表信息
{
if(IsEmpty(L))
Error("Empty List!");
List *p = L->next;
while(p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\tList's length is %d\n", GetListLength(L));
}
int main()
{
List *L1 = CreateNode(0); // 创建头结点
int data[] = {1, 3, 5, 2, 3, 9, 0, 4, 3, 6};
for(int i = 0; i < 10; i++)
Save(data[i], L1);
PrintList(L1);
Delete(3, L1);
PrintList(L1);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
链表删除节点帮写代码 私信
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询