Chúng tôi được cung cấp một danh sách liên kết. Danh sách được sắp xếp đầu tiên và sau đó xoay vòng theo K số nút. Mục đích là để tìm giá trị của K. Nếu chúng ta được cung cấp danh sách liên kết dưới đây làm đầu vào được xoay theo K số nút -
Sau đó, bản gốc phải là -
Và chúng ta có thể thấy K ở đây là 2. Đầu vào danh sách liên kết là một vòng quay của 2 nút trong danh sách liên kết đã được sắp xếp ban đầu.
Hãy cho chúng tôi hiểu với các ví dụ.
Đầu vào - Danh sách:5 → 7 → 9 → 1 → 3
Đầu ra
Các phần tử trong danh sách liên kết là:5 7 9 1 3
Số lượt xoay trong danh sách liên kết được sắp xếp và xoay vòng là - 3
Giải thích - Chúng ta có thể lấy danh sách đầu vào sau ba lần xoay trong danh sách được sắp xếp ban đầu.
1 → 3 → 5 → 7 → 9, gốc9 → 1 → 3 → 5 → 7, xoay 17 → 9 → 1 → 3 → 5, xoay 25 → 7 → 9 → 1 → 3 xoay 3
Đầu vào - Danh sách - 17 → 25 → 62 → 99
Đầu ra
Các phần tử trong danh sách được liên kết là - 17 25 62 99
Số lượt xoay trong danh sách liên kết được sắp xếp và xoay vòng là - 4
Giải thích - Chúng ta có thể lấy danh sách đầu vào sau bốn lần xoay trong danh sách được sắp xếp ban đầu.
17 → 25 → 62 → 99, gốc99 → 17 → 25 → 62, xoay 162 → 99 → 17 → 25, xoay 225 → 62 → 99 → 17, xoay 317 → 25 → 62 → 99, xoay 4Cách tiếp cận được sử dụng trong chương trình dưới đây như sau
Đầu vào Danh sách được liên kết sẽ có một điểm mà tại đó nút tiếp theo nhỏ hơn nút trước. Nếu chuỗi đầu vào cũng được sắp xếp thì nó sẽ xoay hoàn toàn chuỗi đầu vào. Bắt đầu từ nút đầu, đi ngang cho đến (dữ liệu của nút hiện tại> dữ liệu của nút đầu) và số lượng gia tăng. Trong trường hợp (dữ liệu của nút hiện tại
Lấy một danh sách đầu vào và chèn các phần tử vào đó.
Hàm insert_node (struct List_Node ** head, int data) chèn các nút ở đầu danh sách được liên kết đơn với dữ liệu.
Hàm print (nút struct List_Node *) in đầu vào Danh sách được liên kết bắt đầu từ đầu cho đến cuối bằng vòng lặp while.
Các phép quay hàm (struct List_Node * head) lấy con trỏ đầu của danh sách được liên kết và trả về số lần xoay được thực hiện trong danh sách được liên kết ban đầu để nhận được danh sách được liên kết đầu vào.
Lấy số lượng ban đầu là 0.
Lấy biến tạm thời làm phần dữ liệu của nút đầu.
Sử dụng vòng lặp while, đi qua cho đến khi đến cuối danh sách được liên kết. (đầu! =NULL).
Số lượng tăng lên trong trường hợp dữ liệu của mọi nút hiện tại lớn hơn nhiệt độ.
Trong trường hợp dữ liệu của nút hiện tại nhỏ hơn dữ liệu của nút đầu (tạm thời). Giải lao,
Chúng tôi sẽ đếm số lần quay.
Kết quả là số lượt trả lại.
Ví dụ
#includeusing namespace std; struct List_Node {int data; struct List_Node * next;}; int rotations (struct List_Node * head) {int count =0; int temp =head-> dữ liệu; while (head! =NULL) {if (temp> head-> data) {break; } đếm ++; head =đầu-> tiếp theo; } return count;} void insert_node (struct List_Node ** head, int data) {struct List_Node * new_node =new List_Node; new_node-> data =dữ liệu; new_node-> next =(* head); (* head) =new_node;} void print (struct List_Node * node) {while (node! =NULL) {cout < data <<""; node =node-> next; }} int main () {struct List_Node * head =NULL; insert_node (&head, 2); insert_node (&head, 1); insert_node (&head, 18); insert_node (&head, 35); insert_node (&head, 28); cout <<"Các phần tử trong danh sách liên kết là:"; in (đầu); cout <<"\ nSố phép quay trong danh sách liên kết được sắp xếp và xoay vòng là:" < Đầu ra
Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -
Các phần tử trong danh sách được liên kết là:28 35 18 1 2 Số lượt xoay trong danh sách được liên kết được sắp xếp và xoay vòng là:2