/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <stdlib.h>
struct node
{
int num;
struct node *next;
};
typedef struct node Node;
typedef struct node * Link;
//判断动态分配空间是否成功
void is_malloc_ok(Link new_node)
{
//new_node->next = NULL;
//head->next = new_node;
if(new_node == NULL)
{
printf("malloc error!\n");
exit(-1);
}
}
//创建新的节点包括分配动态存储空间
void create_node(Link *new_node)
{
*new_node = (Link)malloc(sizeof(Node));
is_malloc_ok(*new_node);
//(*head)->next = NULL;
}
//创建新的链表,分配头节点
void create_link(Link *head)
{
create_node(head);
(*head)->next = NULL;
}
//在链表中添加新的节点
void insert_node(Link *head,Link new_node)
{
new_node->next = (*head)->next;
(*head)->next = new_node;
}
//打印所有的链表
void display(Link *head)
{
Link temp;
temp = (*head)->next;
while(temp != NULL)
{
printf("num = %3d\n",temp->num);
temp = temp->next;
}
}
//链表逆序
void nixu(Link *head)
{
Link temp,temp1,temp2;
temp = (*head)->next;
int flag = 1;
while(temp->next != NULL)
{
temp = temp->next;
}
temp2 = temp;
//(*head)->next = temp;
//printf("\nnum = %d\n",temp->num);
while(flag)
{
temp1 = (*head)->next;
while(temp1->next != temp)
{
temp1 = temp1->next;
}
temp->next = temp1;
temp = temp1;
if(temp == (*head)->next)
{
flag = 0;
}
}
temp->next = NULL;
(*head)->next = temp2;
}
int main()
{
//创建新的节点
Link head = NULL;
Link new_node = NULL;
//设置循环变量
int i;
create_link(&head);
//创建新的节点赋值并添加到链表中
//头插的方式
for(i = 0;i < 10;i++)
{
create_node(&new_node);
new_node->num = i;
//create_node(new_node);
insert_node(&head,new_node);
}
//打印所有节点内容
display(&head);
//逆序链表操作
nixu(&head);
//打印所有节点内容
display(&head);
return 0;
}
链表反序
最新推荐文章于 2020-04-15 20:46:35 发布