在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 << "这不是成对排序的";
   }
}
输出结果
这是成对排序的