#include <bits/stdc++.h>
using namespace std;
typedef struct NODE //每个节点是一个结构体变量,给结构体类型起个别名node
{
int data;
struct NODE *next;
}node;
node* init_list() //初始化链表的函数
{
node* head=(node*)malloc(sizeof(node*)); //建立一个空节点,由head指向它
node* temp=head; //temp指向最后一个节点
for(int i=1;i<=5;i++)
{
node* a=(node*)malloc(sizeof(node*)); //新建一个节点
a->data=i; //写数据域
temp->next=a; //让前一个节点指向新建的节点
temp=a; //更新最后一个节点为新建的节点
}
temp->next=NULL; //最后一个节点的指针域置NULL
return head;
}
void display(node* head)
{
node* temp=head;
cout<<"链表元素依次为:";
while(temp->next)
{
temp=temp->next;
cout<<temp->data<<" ";
}
cout<<endl;
}
node* add_data(node* head,int index,int des)//比如要在第四个节点处插入一个节点,数据为5,那么index=4,des=5
{
cout<<"在第"<<index<<"个元素处插入"<<des<<endl;
node* temp=head; //temp指向空节点
for(int i=1;i<index;i++)
temp=temp->next; //循环3次,此时temp为第三个节点的地址
node* newnode=(node*)malloc(sizeof(node*));//创造新节点
newnode->data=des; //写新节点的数据域
newnode->next=temp->next; //新节点指向第四个节点
temp->next=newnode; //第三个节点指向新节点
return head; //此时新节点实际上成为了第四个节点,完成功能
}
node* del_data(node* head,int index) //假设要删除第三个节点,index=3
{
cout<<"删除第"<<index<<"个元素"<<endl;
node* temp=head;
for(int i=1;i<index;i++)
temp=temp->next; //循环两次,此时temp为第二个节点的地址
node* deltemp=temp->next; //记录要删除的第三个节点的地址
temp->next=temp->next->next; //让第二个指向第四个元素
free(deltemp); //删除第三个元素
return head;
}
int select_data(node* head,int des) //函数完成找到目标元素,返回下标
{
node* temp=head;
int i=0;
while(temp->next!=NULL) //看节点是否为空节点
{
temp=temp->next;
i++;
if(temp->data==des)
return i;
}
return -1;
}
int change_data(node* head,int src,int des) //和查找类似,找到以后改动数值即可
{
cout<<"将"<<src<<"改为"<<des<<endl;
node* temp=head;
int i=0;
while(temp->next!=NULL)
{
temp=temp->next;
i++;
if(temp->data==src)
{
temp->data=des;
return 0;
}
}
cout<<"查找不到元素"<<src<<endl;
}
int main()
{
node* head=init_list();//初始化链表
display(head);
add_data(head,4,7);
display(head);
del_data(head,3);
display(head);
cout<<"7的坐标为"<<select_data(head,7)<<endl;
change_data(head,4,6);
display(head);
return 0;
}
执行结果: