第一步:先把头文件写好 linkedList.h
//这是头文件
struct person
{
int value;//记录对象
struct person * next;//指向下一个对象
};
typedef struct person p;
/*addLast从最后一个处添加。 先判断头在不在,
如果头在的话,就循环判断知道找到最后一个,创建实例,添加至最后一个的后面位置处 */
void addLast(p* head,int val);
//传一个头进来,便知道后面的是什么
void print(p* head);
//removeFirst移除第一个,先判断第一个在不在,在的话先移除,然后再把后面的覆盖过来,
//用指针的指针的原因 1因为如果用单个*传过来的参数只是值拷贝,无法对原来的头进行修改,如果用指针的指针即可对原来的头修改
void removeFirst(p** head);
第二步:linkedList.c
#include <stdio.h>
#include <stdlib.h>
#include "linkedList.h"
void addLast(p* head,int val){
//判断头是否等于null
if(head==NULL) return;
//如果不等于null 创建一个新的指针对象等于头
p* current = head;
//循环
while(current->next != NULL){ //判断如果叶伟栋后面有人的话,那就指向那个人,一直指直到curren->等于null
current = current->next;
}
//创建实例
p* newPerson = malloc(sizeof(p)); //创建实例,指定内存空间
newPerson->value = val;
newPerson->next = NULL;
current->next = newPerson; //上面循环得到了最后的next没有人了,则addLast添加newPerson对象到最后去
}
void print(p* head){
if(head==NULL) return; //没有头则返回它
p* current = head; //创建一个对象 把头赋给它
while(current != NULL){ //不等于null进入循环
printf("%d\n",current->value); //输出它的值 1
current = current->next; //指向下一个对象,把 它赋给curent 又进入while循环,不等于空又输出值2,一直循环直到等于空
}
}
void removeFirst(p** head){ //引用传递 **
if(*head==NULL) return;//若头等于null则说明没有头,没有头就无法确定确定下一个人,则说明没有人,返回它
p* current; //创建一个对象
if((*head)->next != NULL){
current = (*head)->next; //若叶伟栋后面有人,则不等于null,就把下一个对象赋给curren,
}
free((*head));//上面已经查到了叶伟栋后面有人 所以可以内存了
*head = current;//把头赋给下一个查到的对象对象
}
int main(){
p* head = malloc(sizeof(p));//分配空间
head->value = 1; //值为1
head->next = NULL; //下一个对象等于NULL 等于没有下一个 终止
p* last = malloc(sizeof(p)); //分配空间
addLast(head,2); //在最后添加一个对象
printf("addLast......\n");
print(head); //输出头的值
}