更多资料请点击:我的目录
本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢!
运行结果:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct node
{
int data;
struct node *next;
};
struct node *init_list()//创建带头节点链表
{
struct node *head = malloc(sizeof(struct node));
if(head != NULL)
{
head->next = head;
}
return head;
}
struct node *new_node(int data)//创建新节点并赋值
{
struct node *new = malloc(sizeof(struct node));
if(new != NULL)
{
new->next = new;
new->data = data;
}
return new;
}
void link_list(struct node *head, struct node *new)//链接新节点
{
if(head != NULL && new != NULL)
{
if(head->next == head)//判断是否为空
{
head->next = new;//将头节点指向new
new->next = head;//将new指向头节点
return;
}
struct node *tail = head;
while(tail->next != head)
{
tail = tail->next;
}
tail->next = new;
new->next = head;
}
}
void show(struct node *head,int N)//输出显示
{
if(N == 1)printf("变换前:");
else printf("变换后:");
if(head != head->next)
{
struct node *tail = head;
while(tail->next != head )
{
tail = tail->next;
printf("%d\t",tail->data);
}
printf("\n");
}
}
void over_turn(struct node *head)//链表元素前后翻转
{
if(head->next != head)
{
struct node *p = head->next;
struct node *tail = p->next;
while(tail != head)
{
p->next = tail->next;
tail->next = head->next;
head->next = tail;
tail = p->next;
}
}
}
int main()
{
struct node *head = init_list();//新建链表
printf("请输入将要插入的数据个数:");
int n ;
scanf("%d",&n);
srand(time(NULL));//随机值
for(int i = 1; i <= n; i++)
{
//struct node *new = new_node(i);//创建新节点并赋值
struct node *new = new_node(rand()%1000);//创建新节点并赋随机值
link_list(head, new);//链接新节点
}
show(head,1);
over_turn(head);//链表元素前后翻转
show(head,2);
return 0;
}
更多资料请点击:我的目录