#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode, *LinkList;
LinkList InitList(LinkList list){ //头插法
list = (LinkList)malloc(sizeof(Lnode));
list->next=NULL;
Lnode *p;
int i=10;
while (i>=0)
{
p = (LinkList)malloc(sizeof(Lnode));
p->data=i;
p->next = list->next;
list->next = p;
i--;
}
return list;
}
LinkList InitList2(LinkList list){ //尾插法
list = (LinkList)malloc(sizeof(Lnode));
Lnode *r,*s;
int i=0;
r =list;
while(i<12){
s = (Lnode*)malloc(sizeof(Lnode));
s->data =i;
r->next =s;
r = s;
i++;
}
r->next = NULL;
return list;
}
void printList(LinkList list){
Lnode *p=list->next ;
while (p!=NULL)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
int containList(LinkList list,int search){
Lnode *p = list->next;
while(p!=NULL){
if(p->data==search){
return 1;
}
p=p->next;
}
return -1;
}
int insertList(LinkList list,int place,int param){
Lnode *p = list->next;
int i =1;
while(p!=NULL){
i++;
if(i==place){
Lnode *temp;
temp = (Lnode*)malloc(sizeof(Lnode));
temp->data=param;
temp->next = p->next;
p->next = temp;
return 1;
}
p = p->next;
}
return -1;
}
int listDelete(LinkList list,int place){
int i=1;
Lnode * p=list->next;
Lnode * temp;
while(p!=NULL){
if(i==place-1){
if(p->next->next==NULL){
free(p->next);
p->next =NULL;
}
else{
temp = p->next;
p->next = temp->next;
free(temp);
}
return 1;
}
i++;
p=p->next;
}
return -1;
}
LinkList Reverse(LinkList list){
Lnode * p =list->next,*temp;
list->next = NULL;
while(p!=NULL){
temp=p->next;
p->next = list->next;
list->next = p;
p = temp;
}
return list;
}
int main(){
LinkList list,list2;
list =InitList(list);
printList(list);
insertList(list,3,100);
printList(list);
listDelete(list,4);
printList(list);
list2 = InitList2(list2);
printList(list2);
insertList(list2,3,100);
printList(list2);
list=Reverse(list);
printList(list);
int *q;
q = (int *)malloc(sizeof(int)*21);
for(int i=0;i<=20;i++){
*(q+i)=i;
}
for (int i = 0; i <= 20; i++)
{
printf("%d ",*(q+i));
}
}
C语言中的链表实现
于 2022-08-22 09:50:28 首次发布