您的位置:首页 > 其它

单向链表新增逆序

2016-11-05 22:08 423 查看
#include <stdio.h>

#include <stdlib.h>

struct node

{

 int num;

 struct node *next;

};

typedef struct node Node;

typedef struct node *Link;

void creat_link(Link *head)

{

 *head =NULL;

}

/*void insert_node_head(Link*head,Link new_node)

{

 new_node->next = *head;

 *head = new_node;

}

*/

void creat_newnode(Link *new_node)

{  

 void is_malloc_ok(Link new_node);

 *new_node = (Link)malloc(sizeof(Node));

 is_malloc_ok(*new_node);

}

void insert_node_tail(Link *head,Link new_node)

{

 Link tmp;

 tmp = *head;

 if(*head == NULL)

 {

  //new_node->next = *head;

  *head = new_node;

  new_node->next = new_node;

 }

 else

 {

  while(tmp -> next != *head)

  {

   tmp = tmp->next;

  }

  tmp -> next = new_node;

  new_node -> next = *head;

 }

}

void is_malloc_ok(Link new_node)

{

 if(new_node == NULL)

 {

  printf("malloc error!\n");

  exit(-1);

 }

}

/*

void insert_node_mid(Link *head,Link *new_node,int num)

{

 Link p1 = NULL;

 Link p2 = NULL;

 p1 = *head;

 if(*head == NULL)

 {

  (*new_node)->next = *head;

  *head = *new_node;

 }

 else

 {

  while((p1->num < num)&&(p1->next != NULL))

  {

   p2 = p1;

   p1 = p1->next;

  }

 }

 if((*head)->next == NULL)

 {

  if(num < p1 -> num)

  {

   (*new_node)->next = *head;

   (*head) = new_node;

  }

  else

  {

   (*head)->next = new_node;

   (*new_node)->next = NULL;

  }

 }

 else

 {

  if(p1 == *head)

  {

   (*new_node)->next = *head;

   *head = *new_node;

  }

  else

  {

   if(p1-> *head != NULL)

   {

    p2 -> next = new_node;

    (*new_node)->next = p1;

   }

   else

   {

    if(num > p1-> num)

    {

     p2 = p1->next;

     p1->next = *new_node;

     (*new_node)->next = p2;

    }

   }

  }

 }

}

*/

void delete_node(Link *head,int num)

{

 Link tmp;

 Link p;

 tmp = p = *head;

 if(NULL == *head)

 {

  printf("link is empty!\n");

  return;

 }

 while(tmp->num != num &&tmp->next!=*head)

 {

  p = tmp;

  tmp = tmp->next;

 }

 if(tmp->num == num)

 {

  if(tmp == *head)

  {

   *head = tmp->next;

   free(tmp);

  }

  else

  {

   p->next = tmp->next;

   free(tmp);

  }

 }

 else

 {

  printf("no such node!\n");

 }

}

void revared(Link *head)

{

 Link p1 = NULL;

 Link p2 = NULL;

 Link p3 = NULL;

 p3 = *head;

 if(*head == NULL)

 {

  printf("no revared!");

  return;

 }

 if((*head)->next == NULL)

 {

  return;

 }

 else

 {

  p2 = p3->next;

  if(p2->next == NULL)

     {

   p2->next = p3;

   *head = p2;

      p3->next = NULL;

   return;

     }

   p1 = p2->next;

   while(p1->next!=NULL)

   {

    p2->next = p3;

    p3 = p2;

    p2 = p1;

    p1 = p1->next;

   }

   p2->next = p3;

   p1->next = p2;

   (*head)->next = NULL;

   *head = p1;

  }

}

void display_node(Link *head)

{

 Link tmp = NULL;

 tmp = *head;

 if(*head == NULL)

 {

  printf("link is empty!");

  return;

 }

 

 while(tmp->next != *head)

 {

  printf("num = %d\n", tmp -> num);

  tmp = tmp->next;

 }

 printf("num = %d\n",tmp -> num);

}

void clear(Link *head)

{

 Link tmp ;

 tmp = *head;

 Link p;

 p = *head;

 if(*head == NULL)

 {

  printf("link is empty!\n");

  return ;

 }

 else

 {

  while(tmp->next != p)

     {

   *head = (*head)->next;

       free(tmp);

       tmp = (*head);

        }

 

  free(tmp);

     *head = NULL;

 }

}

int main()

{

 Link new_node = NULL;

 Link head = NULL;

 int i;

 int num;

 int a[10];

 creat_link(&head);

   

 for(i=0;i<10;i++)

 {

  creat_newnode(&new_node);

  new_node->num = i;

      insert_node_tail(&head, new_node);

 // insert_node_head(&head,new_node);

 }

// printf("input the array!\n");

// scanf("%d",a[10]);

// creat_newnode(&new_node);

// new_node->num = num;

// insert_node_mid(&head,new_head,10)

// display_node(head);

//    revared(&head);

 display_node(&head);

 printf("\n");

// clear(&head);

 display_node(&head);

     delete_node(&head,6);

 // display_node(head);

  return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  单链表