手写链表求帮忙过后三个TEL
  • 板块P1160 队列安排
  • 楼主LFtg
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/5 21:28
  • 上次更新2024/4/6 00:46:48
查看原帖
手写链表求帮忙过后三个TEL
1153111
LFtg楼主2024/4/5 21:28
#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
	int x;
struct Node* next;
}Node;

Node *creat_header_Node() {
	Node* header = (Node*)malloc(sizeof(Node));
	Node* first = (Node*)malloc(sizeof(Node));
	if (header == NULL || first == NULL) {
		return;
	}
	first->x = 1;
	header->x = -1;
	header->next = first;
	first->next = NULL;
	return header;
}
//从左边排头插
Node* Head_Create(Node* header,int aim,int i) {
	if (header == NULL) {
		return;
	}
	Node* prev = header;
	Node* current = prev->next;
	while (current != NULL) {
		if (current->x == aim) {
			Node* newdata = (Node*)malloc(sizeof(Node));
			newdata->x = i;
			newdata->next = current;
			prev->next = newdata;
			return header;
		}
		else {
			prev = current;
			current = prev->next;
		}
	}
}



//从右边排尾插
Node* Tail_Create(Node* header,int aim,int i) {
	Node* current = header->next;
	Node* tail = current->next;
	if (current == NULL) {
		return;
	}
	while (current != NULL) {
		if (current->x == aim) {
			Node* newdata = (Node*)malloc(sizeof(Node));
			newdata->x = i;
			if (tail == NULL) {
				newdata->next = NULL;
			}
			else {
				newdata->next = tail;
			}
			current->next = newdata;
			return header;
		}
		current = tail;
		tail = current->next;
	}

}

Node* delete_Node(Node*header,int val) {
	Node* prev = header->next;
	Node* current = prev->next;
	while (current != NULL) {
		if (current->x == val) {
			prev->next = current->next;
			free(current);
			return header;
		}
		else if(current == NULL) {
			return header;
		}
		else {
			prev = current;
			current = prev->next;
		}
		
	}
}


int main() {
	int n;
	scanf("%d", &n);
	int x;
	int y;
	Node* header = creat_header_Node();
	for (int i = 2; i < n + 1; i++) {
		scanf("%d %d", &x, &y);
		getchar();
		if (y == 0) {
			Head_Create(header, x, i);
		}
		if (y == 1) {
			Tail_Create(header, x, i);
		}
	}
	int number;
	scanf("%d", &number);
	getchar();
	for (int i = 0; i < number ; i++) {
		scanf("%d", &n);
		getchar();
		delete_Node(header, n);
	}
	Node* current = header->next;
	while (current != NULL) {
		printf("%d ", current->x);
		current = current->next;
	}
}


2024/4/5 21:28
加载中...