文章

20

粉丝

224

获赞

56

访问

136.7k

头像
首尾相连的循环链表
P1018 贵州大学机试题
发布于2022年1月29日 16:05
阅读数 6.5k

#include<stdio.h>
#include<malloc.h>

struct node{
	int num;
	struct node *next;
} node;

int N;

// 创建循环链表
struct node *create() {
	struct node *head, *now, *pre;
	for (int i = 1; i <= N; ++i) {
		now = (struct node *) malloc (sizeof(node));
		if (i == 1) {
			head = now;
			pre = now; 
		}
		now->num = i;
		now->next = head;
		pre->next = now;
		pre = now;
	}
	return head;
}

// 按照题目要求输出
void print(struct node *head) {
	struct node *p, *pre;  // pre 是前一个节点
	p = head;
	int i = 1;
	while (p != NULL) {
		if (p == p->next) {  // 只剩最后一个
			printf("%d", p->num);
			break;
		}
		if (i % 3 == 0) pre->next = p->next;  // 删除它
		else pre = p;  // 这里一定要用 else 如果是删除的话 pre 不变
		p = p->next;
		++i;
	}
}

int main(){
	struct node *head;
	scanf("%d", &N);
	head = create();
	print(head);
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发