说一下一个大概的思路,首先定义两个指针,一个指针用来向前移动(叫当前指针),另一个指针紧跟其后(叫前驱指针),这个主要用于链表的增删,判断是否要删除当前指针指向的节点,或者增加节点。如果需要删除当前节点,则前驱指针的下一个节点指向当前指针的下一个节点,释放当前指针指向的节点,然后当前指针指向前驱指针的下一个节点,增加也是一样的,一直这样遍历整个链表。至于修改节点数据,那么需要一个当前指针就够了,找到要修改的节点,修改就好了。
创新互联公司基于成都重庆香港及美国等地区分布式IDC机房数据中心构建的电信大带宽,联通大带宽,移动大带宽,多线BGP大带宽租用,是为众多客户提供专业成都西信服务器托管报价,主机托管价格性价比高,为金融证券行业服务器托管,ai人工智能服务器托管提供bgp线路100M独享,G口带宽及机柜租用的专业成都idc公司。
闲着没事干,刚写了代码,给你参考一下:
// 删除节点
void delete_node_credit(float const credit) {
stu *pre_node = head;
stu *cur_node = head-next;
while ( cur_node ) {
if ( cur_node-credit == credit ) {
pre_node-next = cur_node-next;
free(cur_node);
cur_node = pre_node-next;
} else {
pre_node = cur_node;
cur_node = cur_node-next;
}
}
// 判断是否删除头节点
if ( head-credit == credit ) {
cur_node = head-next;
free(head);
head = cur_node;
}
}
// 新增节点
void insert_node_credit(stu *new_node, float const credit) {
stu *pre_node = head;
stu *cur_node = head-next;
if ( pre_node-credit credit ) { // 新增节点是头节点
head = new_node;
new_node-next = pre_node;
return;
}
while ( cur_node ) {
if (cur_node-credit credit pre_node-credit credit ) {
pre_node-next = new_node; // 插入新的节点
new_node-next = cur_node;
return;
}
pre_node = cur_node;
cur_node = cur_node-next;
}
// 新增节点插入链表尾部
if ( pre_node-credit credit ) {
pre_node-next = new_node;
return;
}
}
下面是运行结果
如果你看理解了这个思路,那么链表的增删查改操作就没有问题了。有用的话点一下采纳,谢谢!!!
#include string.h
#include stdio.h
#include stdlib.h//加入三个头文件,删除#DEFINE NULL 0
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *next;
}Lnode;
Lnode *head;
void insert(ElemType x,int i)
{
int j=1;
Lnode *s,*q;
s=(Lnode *)malloc(sizeof(Lnode));
s-data=x;
q=head;
if(i==1)
{
s-next=q;
head=s;
}
else
{
while((ji-1)(q-next!=NULL))
{
q=q-next;
j++;
}
if(j==i-1)
{
s-next=q-next;
q-next=s;
}
else
printf("位置参数不正确!");
}
}
int locate(Lnode *p,ElemType x)
{
int n=0;
Lnode *q=p;
while(q!=NULL q-data!=x)
{
q=q-next;
n++;
}
if(q=NULL)
{
return(-1);
}
else
{
return(n+1);
}
}
main()
{
Lnode *q;
int d,i,n,select,k,flag;
head = NULL;
printf("请输入数据长度:");
scanf("%d",n);
for(i=1;i=n;i++)
{
printf("将数据加入到链表中:");
scanf("%d",d);
insert(d,i);
}
printf("\n输入要查找的数据:");
scanf("%d",d);//这里小了个
k=locate(head,d);
printf("%d\n",d);
}
#includestdio.h
#define NULL 0
typedef struct node
{
int key;
struct node *next;
}Node;
Node first;
int main()
{
char c='a';
int k,i,sum=0,flag=0;
Node *p;
p=first;
printf("请输入链表元素(元素之间用空格间隔):\n");
while(c!='\n')
{
scanf("%d",p-key);
p-next=new Node;
p=p-next;
sum++;
c=getchar();
}
p-next==NULL;
printf("请输入要查找的key值:");
scanf("%d",k);
p=first;
printf("查找符合的节点序数为: ");
for(i=0;isum;i++)
{
if(p-key==k)
{
printf("%d ",i+1);
flag=1;
}
p=p-next;
}
if(flag==0)
printf("无\n查找失败!\n");
}