c语言单链表

#include <stdio.h>
#include <stdlib.h>
#define ERROR -1
#define SUCCESS 0
struct list_node
{
   int data;
   struct list_node *next;
   /* data */
};

typedef struct list_node link_list;

int list_get_size(link_list *list)
{
   int count = 0;
   link_list *p = list;
   if(!list)
   {
       return ERROR;
   }
   while(p->next)
   {
       count++;
       p = p->next;
   }
   return count;
}

int list_insert_head(link_list *list, int data)
{
   struct list_node *new = (struct list_node *)malloc(sizeof(struct list_node *));
   new->data = data;
   link_list *p = list;
   while(new->data!=-1)
   {   
       new->next = p->next;
       p->next = new;
       break; 
   }
   return SUCCESS;
}

int list_insert_tail(link_list *list, int data[], int len)
{   
   link_list *r  = list;
   for(int i = 0; i <len; i++)
   {
       struct list_node *new = (struct list_node *)malloc(sizeof(struct list_node *));
       new->data = data[i];

       r->next = new;
       r = new;
   }
   r->next = NULL;
   return ERROR;
}
struct list_node* list_reverse( struct list_node *list)
{
   struct list_node *new_head = NULL;
   while(list)
   {
       struct list_node *new_node = (struct list_node *)malloc(sizeof(struct list_node));
       new_node->data = list->data;
       new_node->next = new_head;
       new_head = new_node;
       list = list->next;
   }
   return new_head;
}
int reverse(link_list *list)
{
   int i = 0;
   struct list_node *p = list;

   while (p->next)
   {
       p = p->next;
       printf("%d\n", list_reverse(p)->data);
   }
   return 0;
}

int list_print(link_list *list)
{
   int i =0;
   struct list_node *p = list;

   while(p->next)
   {
       p = p->next;
       printf("%d:%d\n", i++, p->data);
   }
   return 0;
}
int main(int argc, char const *argv[])
{
   link_list list;
   link_list list1;
   int i =0;
   int data[10] = {1,2,3,4,5,6,7,8,9,0};
   printf("头插法: \n");
   for(int i = 0; i <10; i++)
   {
       list_insert_head(&list, data[i]);
   }

   list_print(&list);
   printf("list len =%d\n", list_get_size(&list));
   printf("尾插法:\n");
   for (int i = 0; i < 10; i++)
   {
       list_insert_tail(&list1, data, 10);
   }
   list_print(&list1);

   printf("链表翻转:\n");
   reverse(&list1);
   return 0;
}
posted @   心亘久  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示