建立一个包含若干整数或随机数的单向循环链表,然后通过某些算法,将其中的数据翻转

更多资料请点击:我的目录
本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢!
运行结果:
在这里插入图片描述

#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;
}

更多资料请点击:我的目录

可以按照以下步骤实现: 1. 定义一个循环双向链表,并初始化为空。 2. 使用随机数生成器生成10个整数,并将它们插入到链表中。 3. 遍历链表,按序输出这些整数。 4. 从链表的尾部开始遍历,逆序输出这些整数。 代码示例: ```python import random # 定义循环双向链表节点类 class Node: def __init__(self, data): self.data = data self.prev = None self.next = None # 定义循环双向链表类 class DoubleLinkedList: def __init__(self): self.head = None # 在链表尾部插入节点 def append(self, data): new_node = Node(data) if not self.head: self.head = new_node self.head.prev = self.head self.head.next = self.head else: last_node = self.head.prev last_node.next = new_node new_node.prev = last_node new_node.next = self.head self.head.prev = new_node # 遍历链表,按序输出整数 def print_forward(self): if not self.head: print("链表为空") return current_node = self.head while current_node.next != self.head: print(current_node.data, end=" ") current_node = current_node.next print(current_node.data) # 从链表尾部开始遍历,逆序输出整数 def print_backward(self): if not self.head: print("链表为空") return current_node = self.head.prev while current_node != self.head: print(current_node.data, end=" ") current_node = current_node.prev print(current_node.data) # 生成10个随机整数,并插入到链表中 double_linked_list = DoubleLinkedList() for i in range(10): double_linked_list.append(random.randint(1, 100)) # 按序输出整数 print("按序输出整数:") double_linked_list.print_forward() # 逆序输出整数 print("逆序输出整数:") double_linked_list.print_backward() ``` 输出结果: ``` 按序输出整数: 77 89 29 95 20 38 83 62 57 94 逆序输出整数: 94 57 62 83 38 20 95 29 89 77 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佳佳鸽

若文章帮到你,能不能请我喝杯茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值