#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct Node{
int data;
struct Node * next;
}NODE,*PNODE;
//函数声明
PNODE Creat(int n){ //建表
int i=0;
PNODE phead = (PNODE)malloc(sizeof(NODE));
if(phead==NULL){
printf("创建空间失败!系统退出");
exit(-1);
}
PNODE ptail = phead;
ptail->next=NULL;
for(i=0;i<n;i++){
int val;
printf("请输入data值");
scanf("%d",&val);
PNODE pnew =(PNODE)malloc(sizeof(NODE));
if(pnew==NULL){
printf("分配失败!程序停止");
exit(-1);
}
pnew->data=val;
ptail->next=pnew;
pnew->next=NULL;
ptail=pnew;
}
return phead;
}
void Traverse (PNODE phead){ //遍历
PNODE p = phead->next;
printf("链表的内容为:");
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void IsEmpty(PNODE phead){
if(phead->next==NULL){
printf("链表为空\n");
}
else{
printf("链表不为空\n");
}
}
int Length(PNODE phead){ //长度
PNODE p=phead->next;
int count=0;
while(p!=NULL ){
count++;
p=p->next;
}
return count;
}
void Insert(PNODE phead,int pos,int val){ //插入节点
int i=0;
PNODE p=phead;
while(p!=NULL && i<pos-1){
p=p->next;
i++;
}
if(i>pos-1 || p==NULL){
printf("输入有误,程序退出!");
exit(-1);
}
PNODE pnew=(PNODE)malloc(sizeof(NODE));
if(pnew==NULL){
printf("动态分配内存失败!\n");
exit(-1);
}
pnew->data=val;
PNODE q= p->next;
p->next=pnew;
pnew->next=q;
printf("值已插入,插入的值为:%d",val);
}
void delete(PNODE phead,int pos){
int i=0;
PNODE p=phead;
while(p->next!=NULL && i<pos-1){
p=p->next;
i++;
}
PNODE q =p->next;
p->next=p->next->next;
free(q);
q=NULL;
}
int main(){
PNODE phead=NULL;
phead=Creat(5);
Traverse(phead);
printf("判断链表是否为空:");
IsEmpty(phead);
printf("链表长度为:%d\n",Length(phead));
Insert(phead,2,6);
Traverse(phead);
delete(phead,2);
Traverse(phead);
}