#include<stdio.h>
#include<stdlib.h>
#define ElemType int
typedef struct Node{
struct Node *next;
ElemType data;
}Node,*LinkList;
LinkList createLinkH(int n){ //头插法
Node *L;
int x,i;
//初始化
L = (Node*)malloc(sizeof(Node));
L->next=NULL;
printf("请输入元素:\n");
for(i=0;i<n;i++){
Node *p;
p = (Node*)malloc(sizeof(Node));
scanf("%d",&x);
p->data = x;
p->next = L->next;
L->next = p;
}
return L;
}
LinkList createLinkR(int n){//尾插法
Node *L;
Node *r;
int i,x;
L=(Node*)malloc(sizeof(Node));
L->next=NULL;
r = L;
printf("请输入元素:\n");
for(i=0;i<n;i++) {
Node *p;
p = (Node*)malloc(sizeof(Node));
scanf("%d",&x);
p->data = x;
r->next = p;
r = p;
}
r->next=NULL;
return L;
}
int AddNode(LinkList L,int pos,ElemType ele){
LinkList p;
Node *s;
p=L;
int j=1;
while(p&&j<pos){
p=p->next;
++j;
}
if(!p||j>pos){
return 0;
}
s = (Node*)malloc(sizeof(Node));
s->data = ele;
s->next = p->next ;
p->next = s;
return 1;
}
int deleteElem(LinkList L,int pos){
LinkList p,s;
p=L;
int j=1;
while(p&&j<pos){
p=p->next;
++j;
}
if(!p||j>pos){
return 0;
}
s=p->next;
p->next=s->next;
free(s);
return 1;
}
int getElem(LinkList L,int pos){
Node *p;
p=L->next;
int i=1;
while(p&&i<pos){
p=p->next;
++i;
}
if(!p||i>pos){
return 0;
}
return p->data;
}
void printLink(LinkList L){
Node *p;
for(p=L->next;p!=NULL;p=p->next){
printf("%d ",p->data);
}
printf("\n");
}
int getSize(LinkList L){
Node *p;
int count=0;
for(p=L->next;p!=NULL;p=p->next){
count++;
}
return count;
}
int main(){
LinkList L;
int n;
printf("输入单链表的长度:");
scanf("%d",&n);
L = createLinkR(n);
printLink(L);
AddNode(L,2,7);
printLink(L);
printf("大小为:%d\n",getSize(L));
deleteElem(L,2);
printLink(L);
printf("第二个数为:%d\n",getElem(L,2));
printf("大小为:%d\n",getSize(L));
}
网友评论