เราได้รับรายการที่เชื่อมโยง รายการจะถูกจัดเรียงก่อนแล้วจึงหมุนตามจำนวนโหนด K เป้าหมายคือการหาค่าของ K หากเราได้รับรายการเชื่อมโยงด้านล่างเป็นอินพุตซึ่งหมุนด้วยจำนวนโหนด K -
แล้วต้นฉบับต้องเป็น −
และเราสามารถเห็น K ที่นี่คือ 2 Input linked list คือการหมุนของ 2 nodes ในรายการ sorted linked list เดิม
ให้เราเข้าใจด้วยตัวอย่าง
ป้อนข้อมูล − รายการ :5 → 7 → 9 → 1 → 3
ผลผลิต
องค์ประกอบในรายการที่เชื่อมโยงคือ:5 7 9 1 3
จำนวนการหมุนในรายการเชื่อมโยงที่เรียงลำดับและหมุนคือ − 3
คำอธิบาย − เราสามารถรับรายการอินพุตหลังจากการหมุนสามครั้งในรายการเรียงดั้งเดิม
1 → 3 → 5 → 7 → 9, ต้นฉบับ 9 → 1 → 3 → 5 → 7, การหมุน 17 → 9 → 1 → 3 → 5 การหมุน 25 → 7 → 9 → 1 → 3 การหมุน 3
ป้อนข้อมูล − รายการ − 17 → 25 → 62 → 99
ผลผลิต
องค์ประกอบในรายการที่เชื่อมโยงคือ − 17 25 62 99
จำนวนการหมุนในรายการเชื่อมโยงที่เรียงลำดับและหมุนคือ − 4
คำอธิบาย − เราสามารถรับรายการอินพุตหลังจากการหมุนสี่รอบในรายการเรียงดั้งเดิม
17 → 25 → 62 → 99, original99 → 17 → 25 → 62, การหมุน 162 → 99 → 17 → 25, การหมุน 225 → 62 → 99 → 17, การหมุน 317 → 25 → 62 → 99 การหมุน 4ก่อน>แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
อินพุตรายการที่เชื่อมโยงจะมีหนึ่งจุดที่โหนดถัดไปมีขนาดเล็กกว่าโหนดก่อนหน้า หากสตริงอินพุตถูกจัดเรียงด้วย จะเป็นการหมุนแบบเต็มของสตริงเดิม เริ่มต้นจากโหนดหลัก สำรวจจนถึง (ข้อมูลของโหนดปัจจุบัน> ข้อมูลของโหนดหลัก) และนับจำนวนที่เพิ่มขึ้น ในกรณีที่ (ข้อมูลของโหนดปัจจุบัน <ข้อมูลโหนดของโหนด) ทำลายการวนซ้ำ การนับจะมีจำนวนการหมุนในรายการดั้งเดิมเพื่อรับรายการอินพุต
-
นำรายการอินพุตและแทรกองค์ประกอบเข้าไป
-
ฟังก์ชัน insert_node(struct List_Node** head, int data) แทรกโหนดที่ส่วนหัวของรายการที่เชื่อมโยงโดยลำพังด้วยข้อมูล
-
พิมพ์ฟังก์ชัน (โหนด struct List_Node*) พิมพ์อินพุต รายการที่เชื่อมโยง เริ่มต้นจากส่วนหัวจนถึงจุดสิ้นสุดโดยใช้ while loop
-
การหมุนของฟังก์ชัน (struct List_Node* head) ใช้ตัวชี้ส่วนหัวของรายการที่เชื่อมโยงและส่งคืนจำนวนการหมุนที่ทำในรายการที่เชื่อมโยงดั้งเดิมเพื่อรับรายการที่เชื่อมโยงอินพุต
-
นับเริ่มต้นเป็น 0
-
ใช้ตัวแปร temp เป็นส่วนข้อมูลของโหนดหลัก
-
ใช้ while loop เลื่อนไปจนสุดรายการเชื่อมโยง (head!=NULL)
-
จำนวนที่เพิ่มขึ้นในกรณีที่ข้อมูลของโหนดปัจจุบันมากกว่าอุณหภูมิ
-
ในกรณีที่ข้อมูลของโหนดปัจจุบันน้อยกว่าข้อมูลของโหนดหลัก ( ชั่วคราว) แตก
-
เราจะนับจำนวนการหมุน
-
ผลตอบแทนนับเป็นผลลัพธ์
ตัวอย่าง
#includeใช้เนมสเปซ std;struct List_Node{ ข้อมูล int; โครงสร้าง List_Node* ถัดไป;};การหมุนแบบ int (โครงสร้าง List_Node* หัว) { จำนวน int =0; int temp =head->data; ในขณะที่ (หัว !=NULL){ ถ้า (ชั่วคราว> หัว->ข้อมูล){ แตก; } นับ++; หัว =หัว -> ถัดไป; } นับกลับ;} ถือเป็นโมฆะ insert_node (โครงสร้าง List_Node ** หัว, ข้อมูล int) { struct List_Node* new_node =ใหม่ List_Node; new_node->data =ข้อมูล; new_node->next =(*หัว); (*หัว) =new_node;}เป็นโมฆะพิมพ์(โครงสร้าง List_Node* โหนด){ ในขณะที่ (โหนด !=NULL){ cout<<โหนด->ข้อมูล<<" "; โหนด =โหนด -> ถัดไป; }}int main(){ โครงสร้าง List_Node* head =NULL; insert_node(&หัว, 2); insert_node(&หัว, 1); insert_node(&หัว, 18); insert_node(&หัว 35); insert_node(&หัว 28); cout<<"องค์ประกอบในรายการที่เชื่อมโยงคือ:"; พิมพ์(หัว); cout<<"\nจำนวนการหมุนในรายการเชื่อมโยงที่เรียงลำดับและหมุนแล้วคือ:"< ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
องค์ประกอบในรายการเชื่อมโยงคือ:28 35 18 1 2จำนวนการหมุนในรายการเชื่อมโยงที่เรียงลำดับและหมุนแล้วคือ:2