#include <stdio.h>
#include <stdlib.h>
struct Node{
int data;
struct Node* next;
};
struct Node* Init(){
return NULL;
}
struct Node* CreateNode(int data){
struct Node* tmp;
tmp = (struct Node*)malloc(sizeof(struct Node));
if(tmp){
tmp->data = data;
tmp->next = NULL;
}
return tmp;
}
struct Node* FindByValue(struct Node *head, int value){
while(head && head->data!=value){
head = head->next;
}
return head;
}
struct Node* FindByIndex(struct Node *head, int pos){
if(pos<1) return NULL;
struct Node* tmp;
tmp = head;
for(int i=0; tmp; tmp=tmp->next){
i++;
if(i==pos) return tmp;
}
return NULL;
}
int Insert(struct Node** ph, int pos, int data){
if(pos<1) return -1;
struct Node* tmp;
tmp = CreateNode(data);
if(tmp==NULL) return -2;
if(pos==1){
tmp->next = *ph;
*ph = tmp;
return 0;
}
struct Node* p;
p = FindByIndex(*ph, pos-1);
if(!p) return -3;
tmp->next = p->next;
p->next = tmp;
return 0;
}
void PrintList(struct Node* head){
while(head){
printf("%d ",head->data);
head = head->next;
}
putchar('\n');
}
int GetLength(struct Node* head){
int i;
for(i=0; head; i++,head=head->next);
return i;
}
void DestroyList(struct Node **ph){
struct Node *tmp;
while(*ph){
tmp = *ph;
*ph = (*ph)->next;
free(tmp);
}
}
int main(){
struct Node* head;
head = Init();
printf("Length is %d\n",GetLength(head));
int flag;
struct Node* tmp;
tmp = CreateNode(33);
head = tmp;
PrintList(head);
printf("Length is %d\n",GetLength(head));
tmp = CreateNode(22);
tmp->next = head;
head = tmp;
PrintList(head);
printf("Length is %d\n",GetLength(head));
flag = Insert(&head, 3 ,11);
PrintList(head);
printf("Length is %d\n",GetLength(head));
DestroyList(&head);
PrintList(head);
printf("%d\n",head);
return 0;
}
数据结构双语课->不带头节点的单链表实现
最新推荐文章于 2022-03-13 21:40:10 发布