对参数所给定的队列sq中的整数进行操作,将其中奇数的顺序进行逆置,偶数的顺序维持不变C语言不用栈
时间: 2024-05-21 14:10:54 浏览: 75
void reverse_odd(Queue *sq) {
QueueNode *p, *odd_head = NULL, *odd_tail = NULL;
int odd_count = 0;
// 将队列中的奇数节点分离出来
p = sq->front;
while (p != NULL) {
if (p->data % 2 == 1) {
if (odd_head == NULL) {
odd_head = p;
odd_tail = p;
} else {
odd_tail->next = p;
odd_tail = p;
}
odd_count++;
}
p = p->next;
}
// 对奇数节点进行逆置
if (odd_count > 1) {
p = odd_head->next;
odd_head->next = NULL;
while (p != NULL) {
QueueNode *q = p->next;
p->next = odd_head;
odd_head = p;
p = q;
}
}
// 将逆置后的奇数节点插入队列中
if (odd_head != NULL) {
odd_tail->next = sq->front;
sq->front = odd_head;
if (sq->rear == NULL) {
sq->rear = odd_tail;
}
}
}
阅读全文