自己看个十几天参悟呗
//链表创建、头插、尾插、删除、翻转、删除相同元素、遍历、判断链表是否为空
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int data;
struct Node *next;
}Node;
void createLink(Node *head,int size);//创建链表
void travelLink(Node *head);//遍历链表
void insertForward(Node *head,int data);//头插法
void insertBack(Node *head,int data);//尾插法
void deleteSame(Node *head);//删除相同元素
void reverseLink(Node *head);//翻转链表元素
void deleteLink(Node *head);//删除链表
void isEmpty(Node *head);//判断链表是否为空
int main(){
Node *head=(Node*)malloc(sizeof(Node));
head->next=NULL;
int n;
printf("请设置链表长度:");
scanf("%d",&n);
printf("请输入链表内容:");
createLink(head,n);//创建链表
printf("遍历链表------->");
travelLink(head);//遍历链表
insertForward(head,100);//头插法
printf("头插法--------->");
travelLink(head);//遍历链表
insertBack(head,200);//尾插法
printf("尾插法--------->");
travelLink(head);//遍历链表
deleteSame(head);//删除相同元素
printf("删除相同元素--->");
travelLink(head);//遍历链表
reverseLink(head);//翻转链表元素
printf("翻转链表元素--->");
travelLink(head);//遍历链表
deleteLink(head);//删除链表
printf("删除链表------->");
isEmpty(head);//判断链表是否为空
return 0;
}
//创建链表
void createLink(Node *head,int size){
Node *a=head;
for(int i=0;i<size;i++){
Node *b=(Node*)malloc(sizeof(Node));
b->next=NULL;
scanf("%d",&b->data);
a->next=b;
a=a->next;
}
}
//遍历链表
void travelLink(Node *head){
Node *p=head->next;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
putchar('\n');
}
//头插法
void insertForward(Node *head,int data){
Node *t=(Node*)malloc(sizeof(Node));
t->data=data;
t->next=head->next;
head->next=t;
}
//尾插法
void insertBack(Node *head,int data){
Node *a=(Node*)malloc(sizeof(Node));
a->next=NULL;
a->data=data;
Node *b=head;
while(b->next != NULL) b=b->next;
b->next=a;
}
//删除相同元素
void deleteSame(Node *head){
Node *a=head->next;
while(a!=NULL){
Node *b=a;
Node *c=a->next;
while(c!=NULL){//若有相同的元素,则删除;否则两个指针继续向下走
if(a->data == c->data){
b->next=c->next;
free(c);
c=b->next;
}else{
b=b->next;
c=c->next;
}
}
a=a->next;
}
}
//翻转链表
void reverseLink(Node *head){
Node *a;
Node *b=NULL;
while(head->next!=NULL){
a=head->next;
head->next=a->next;
a->next=b;
b=a;
}
head->next=b;
}
//删除链表
void deleteLink(Node *head){
Node *a;
while(head->next != NULL){
a=head->next;
head->next=a->next;
free(a);
}
}
//判断链表是否为空
void isEmpty(Node *head){
if(head->next == NULL) printf("链表为空\n");
else printf("链表不为空\n");
}
我自己都看代码看视频看书十几天自学玩的(大一小孩的小声bb)