题目
删除单链表中所有值大于 mink 且小于 maxk 的元素【问题描述】已知线性表中的元素以值非递减有序排列 , 并以单链表作为存储结构 ( 含头结点 ),试写一高效的算法 , 删除表中所有值大于 mink 且小于 maxk 的元素 ( 若表中存在这样的元素 ), 同时释放被删结点空间 ( 注意 :mink 和 maxk 是给定的两个参变量 , 它们的值可以和表中的元素相同 , 也可以不同 .) 这里注意是大于且小于 , 没有等于 .【输入形式】第一行 : 非递减序列以 -1 结束 第二行为 mink maxk 也以 -1 结束【输出形式】删除后的链表数据【样例输入】 1 3 5 7 7 9 10 12 -13 9 -1【样例输出】 1 3 9 10 12
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
Node* createLinkedList(int arr[]) {
Node* head = (Node*)malloc(sizeof(Node));
Node* cur = head;
int i = 0;
while (arr[i] != -1) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr[i];
newNode->next = NULL;
cur->next = newNode;
cur = cur->next;
i++;
}
return head;
}
void deleteElements(Node* head, int mink, int maxk) {
Node* cur = head->next;
Node* prev = head;
while (cur != NULL && cur->data <= maxk) {
if (cur->data > mink) {
Node* temp = cur;
prev->next = cur->next;
cur = cur->next;
free(temp);
} else {
prev = cur;
cur = cur->next;
}
}
}
void printLinkedList(Node* head) {
Node* cur = head->next;
while (cur != NULL) {
printf("%d ", cur->data);
cur = cur->next;
}
printf("\n");
}
int main() {
int arr[100];
int mink, maxk;
int i = 0;
while (scanf("%d", &arr[i]), arr[i] != -1) {
i++;
}
scanf("%d %d", &mink, &maxk);
Node* head = createLinkedList(arr);
deleteElements(head, mink, maxk);
printLinkedList(head);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[100];
int b[100];
int n=0;
int j=0;
while(scanf("%d",&a[n]) && a[n]!=-1){
n++;
}
while(scanf("%d",&b[j]) && b[j]!=-1){
j++;
}
for(int i=0;i<n;i++)
{
if(a[i]<=b[0] || a[i]>=b[1])
printf("%d ",a[i]);
}
return 0;
}