结构体
typedef struct Node {
int data;
struct Node *next;
}Node;
typedef struct Node *Linklist;
链表创建
Status creatList(Linklist *p){
*p = (Linklist )malloc(sizeof(Node));
if (*p == NULL) {
printf("链表创建失败!");
return 0;
}
(*p)->data = 0;
(*p)->next = *p;
return 1;
}
插入
Status ListInsert(Linklist *p,int data , int index){
if (*p == NULL) {
printf("链表不存在");
return 0;
}
Linklist temp,newNode;
if (index == 1) {
newNode = (Linklist) malloc(sizeof(Node));
if (newNode == NULL) {
return 0;
}
newNode->data = data;
for (temp = *p; temp->next != *p; temp = temp->next);
newNode->next = temp->next;
temp->next = newNode;
*p = newNode;
}else{
temp = *p;
int i = 1;
for ( i = 1; i < index; i ++) {
temp = temp->next;
}
if (index > i) {
return 0;
}
newNode = (Linklist) malloc(sizeof(Node));
if (newNode == NULL) {
return 0;
}
newNode->data = data;
newNode->next = temp->next;
temp->next = newNode;
(*p) = temp;
}
return 1;
}
删除
Status ListDel(Linklist *p , int index){
int i;
Linklist temp,target;
if (index == 1) {
if((*p)->next == (*p)){
(*p) = NULL;
return 1;
}
for (target = *p; target->next != *p; target = target->next);
temp = *p;
*p = (*p)->next;
target->next = *p;
free(temp);
}else{
if (*p == NULL) {
return 0;
}
temp = *p;
i = 0;
while (temp && i < index-1 ) {
temp = temp->next;
i ++ ;
}
target = temp->next;
temp->next = target->next;
free(target);
}
return 1;
}
打印
void enumList(Linklist p){
printf("链表数据如下:\n");
Linklist temp;
temp = p;
while (p->next != temp) {
printf("%5d",p->data);
p = p->next;
}
printf("\n");
}
网友评论