在C++中检查链表是否成对排序
我们有一个列表L,包含n个元素。我们必须检查这个列表是否按两个顺序排序。假设列表是{8,10,18,20,5,15}。按照(8,10)、(18,20)、(5,15)进行排序。如果列表中有奇数个元素,则最后一个元素将被忽略。
方法太简单,从左到右遍历数字。取两个连续的元素,检查它们是否排序,如果有一对没有排序,则返回false,如果没有找到对,即未排序,则返回true。
示例
#include <iostream> #include <cmath> using namespace std; class Node{ public: int data; Node *next; }; void append(struct Node** start, int key) { Node* new_node = new Node; new_node->data = key; new_node->next = (*start); (*start) = new_node; } bool isPairwiseSorted(Node *start) { bool flag = true; struct Node* temp = start; while (temp != NULL && temp->next != NULL) { if (temp->data < temp->next->data) { flag = false; break; } temp = temp->next->next; } return flag; } int main() { Node *start = NULL; int arr[] = {8, 10, 18, 20, 5, 15}; int n = sizeof(arr)/sizeof(arr[0]); for(int i = 0; i<n; i++){ append(&start, arr[i]); } if(isPairwiseSorted(start)){ cout << "这是成对排序的"; } else { cout << "这不是成对排序的"; } }输出结果
这是成对排序的