#include#include #include //定义链表节点的结构体 typedef struct node { int val;//数据域 struct node *next;//指针域 }Node; //链表的初始化 Node *init() { Node *head; head=(Node*)malloc(sizeof(struct node));//分配内存 return head; } //取出链表pos位置的数据(pos表示链表的第pos个节点) int get_val(Node *head,int pos) { Node *p=head; int i=0; while(i p=p->next; i++; } return p->val; } //求链表的长度 int lenght_list(Node *head) { int len=0; Node *temp=head; while(temp->next) { temp=temp->next; len++; } return len; } //向链表插入数据,头插法,成功返回1,失败返回0 int insert_node(Node *head,int pos,int x) { if(pos>lenght_list(head)+1||pos<=0) { return 0; } Node *p=head; int i=1; while(i p=p->next; i++; } Node *q=(Node*)malloc(sizeof(struct node)); q->val=x; q->next=p->next; p->next=q; return 1; } //删除第pos个节点,成功返回1,失败返回0 int del_pos(Node *head,int pos) { if(pos>lenght_list(head)||pos<=0) { return 0; } int i=1; Node *p=head; while(i p=p->next; i++; } Node *q=p->next; p->next=p->next->next; free(q);//释放内存空间 return 1; } //输出整个链表的数据域 void printf_all(Node *head) { Node *p=head; while(p->next) { p=p->next; printf("%-5d",p->val); } printf("n"); } //逆序输出整个链表的数据域 void revser_print_all(Node *head) { if(head->next==NULL) return ; head=head->next; revser_print_all(head); printf("%-5d",head->val); } //删除整个链表,并释放内存 void free_list(Node *head) { if(head==NULL) return ; head=head->next; printf("1");//删除成功打印1 free_list(head); free(head); } //将整个链表逆序 void ReverseLinklist(Node *head) { Node *p,*q; p=head->next; head->next=NULL; while(p!=NULL) { q=p; p=p->next; q->next=head->next; head->next=q; } return ; } int main() { Node *head=init();//链表初始化 insert_node(head,1,40); insert_node(head,1,30); insert_node(head,1,10); insert_node(head,2,20); printf_all(head);//输出整个链表 del_pos(head,1);//删除第一个节点 printf_all(head);//输出整个链表 int l=lenght_list(head);//输出链表的长度 printf("%dn",l); revser_print_all(head);//逆序输出整个链表 printf("n"); free_list(head);//清空链表 printf("n"); }
如果感觉这篇文章对你有帮助的话,点个赞满足一下作者的虚荣心,哈哈哈!
有问题可以私信我或者评论区交流一下,大家一起进步!
作者:conspicuous 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



