输入3 4 5 6 7 9999一串整数,9999代表结束,通过尾插法新建链表,查找第二个位置的值并输出,在2个位置插入99,输出为 3 99 4 5 6 7,删除第4个位置的值,打印输出为 3 99 4 5 6 7。
输出函数如下:
void PrintList(LinkList L)
{
L = L->next;
while (L != NULL)
{
printf("%3d", L->data);//打印当前结点数据
L = L->next;//指向下一个结点
}
printf("\n");
}
我的代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct LNode
{
Elemtype data;
struct LNode *next;
}LNode,*Linklist;
//定义一个输出函数
void print(Linklist L)
{
L=L->next;
while(L->next!=NULL)
{
L=L->next;
printf("%3d",L->data);
}
}
//查找某个序号的值
Linklist GetElem(Linklist L,int x)
{
LNode*p=L->next;
int j=1;
if(x==0&&x<1)
{
return L;
}
while(p!=NULL&&j<x)
{
p=p->next;
j++;
}
return L;
}
//通过尾插法建立单链表
Linklist creatlist(Linklist &L)//通过尾插法建立单链表
{
int x;
L=(LNode *)malloc(sizeof(LNode)); //建立新的节点
LNode *p,*s=L;//将L的地址赋给p和s,使他们指向链表
scanf("%d",&x);
while(x!=9999)
{
s=(LNode *)malloc(sizeof(LNode));//建立新的节点
s->data=x; //赋到s节点的数据域
p->next=s;
p=s; //将s所存地址赋给p,p指向新的节点
scanf("%d",&x);//循环赋值
}
p->next=NULL;//直到指针域为空时停止
return L;
}
//根据题目条件插入节点
Linklist tailinsert(Linklist &L,int x)//根据题目条件插入
{
L=(LNode *)malloc(sizeof(LNode)); //建立新的节点
LNode*p,*s;
LNode *s=L;//将L的地址赋给s,使他们指向链表
LNode*p=GetElem(L,x-1);//找到插入序号的前一个节点,并将地址赋给指针p,使其指向前面的节点
s=(LNode *)malloc(sizeof(LNode));//建立新的节点
s->data=99; //赋到s节点的数据域 s->next=p->next;
p->next=s;//让节点p的指针域指向s
p=s; //将s所存地址赋给p,p指向新的节点
scanf("%d",&x);//循环赋值
p->next=NULL;//直到指针域为空时停止
return L;
}
//删除节点
Linklist Delete(Linklist L,int x)
{
LNode *p=GetElem(L,x-1);
LNode *s=GetElem(L,x);//指向需要删除的节点
p->next=s->next;//将s下一个节点的地址赋给p的指针域,p的指针域则指向s的下一个节点
p=s->next;//工作指针p指向s节点的下一个节点
free(s);
return p;
}
int main()
{
Linklist L;
GetElem(L,2);
creatlist(L);
LNode *s; //和Linklist s同样的效果
s=GetElem(L,2);
printf("%d",s->data);
printf("插入节点序号为2的地方");
tailinsert(L,2);
print(L);
printf("删除的序号为4的地方");
Delete(L,4);
print(L);
}
————————————————
版权声明:本文为CSDN博主「永驹我心」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_52297878/article/details/125793794
通信跨考计算机,不对的地方可以一起讨论一下