首先我们要建立一个数据结构来存放链表的节点,可以通过结构体来实现
typedef struct node
{
unsigned long int data;
struct node* next;
}node_t;
一、创建一个节点
第一步,实现定义一个临时变量,并将其初始化
第二步,判断其头结点是否为空节点,如果是空节点,则将临时头指针指向临时变量
第三步,头结点不是空节点,则将头结点指向临时变量的下一个节点 ,并将头结点指向那个节点
node_t* link_create(node_t* head,unsigned long int data)
{
node_t* temp = MALLOC;
temp->data = data;
if(head == NULL)
{
temp->next = NULL;
head = temp;
}
else
{
temp->next = head;
head = temp;
}
return head;
}
二、删除一个节点
第一步,定义两个指针变量分别为temp1,temp2指向头结点
第二步,如果temp1不等于用户要查找的值得节点,则让temp2指向temp1;
temp1指向下一个节点,直到指针指到用户要查到的地方
第三步,此时temp1指向的是当前需要删除的节点,temp2指向的是前一个节点,所以我们将temp2的指针指向temp1的下一个节点,并释放出temp1的节点
node_t* link_create(node_t* head,unsigned long int data)
{
node_t* temp = MALLOC;
temp->data = data;
if(head == NULL)
{
temp->next = NULL;
head = temp;
}
else
{
temp->next = head;
head = temp;
}
return head;
}
三 、修改一个节点
通过查找函数,找到当前需要修改的节点的位置,并对当前节点进行赋值操作,从而实现可以进行修改操作
node_t* link_modify(node_t* head,unsigned long int data1,unsigned long int data2)
{
node_t* temp;
temp = link_query(head,data1);
temp->data = data2;
return head;
}
四 、查找一个节点
第一步,声明一个临时指针指向头结点
第二步,通过循环来查找,如果当前节点不等于用户需要查找到的值,则指针往下一个进行查找,如果一直查找到最后一个节点都没有找到,则输出打印信息,提示当前链表内没有用户查找的数据
node_t* link_query(node_t* head,unsigned long int data)
{
node_t* temp = head;
while(temp->data != data)
{
temp = temp->next;
if(temp->next == NULL)
{
printf("not find your data!");
}
}
return temp;
}
五、显示当前链表
第一步,声明一个临时指针,并将头结点赋值给临时变量
第二步,判断临时指针的下一个节点是否为空,如果不为空,则通过循环打印每个节点的值
第三步,如果为空,则直接输出当前指针的值
void link_display(node_t* head)
{
node_t* temp = head;
while (temp->next != NULL)
{
printf("%ld\n",temp->data);
temp = temp->next;
}
printf("%ld\n",temp->data);
}