ในปัญหานี้ เราได้รับลิงก์ลิสต์ LL ขนาด N หน้าที่ของเราคือ สร้างโปรแกรมสำหรับค้นหารายการที่ไม่ซ้ำในรายการที่ลิงก์ .
รายการที่เชื่อมโยงคือลำดับของโครงสร้างข้อมูลซึ่งเชื่อมต่อกันผ่านลิงก์
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
Input: LL = 4 => 6 => 2 => 4 => 1 => 2 => 6 => 5 Output: 1
คำอธิบาย −
The elements with a single occurrence frequency are 1 and 6. Out of these 1 occurred first in the linked list.
แนวทางการแก้ปัญหา
แนวทางในการแก้ปัญหาคือการสร้างตารางแฮชที่จะจัดเก็บองค์ประกอบและความถี่ในการเกิดขึ้น ในการค้นหาค่าที่ไม่ซ้ำค่าแรกในรายการที่เชื่อมโยง เราจะสำรวจรายการที่เชื่อมโยงและแทรกองค์ประกอบที่ไม่อยู่ในแผนที่แฮชเข้าไปด้วยความถี่การเกิดขึ้นครั้งแรก 1. หากมีองค์ประกอบใดอยู่ในแผนที่แฮช ค่านั้นจะเพิ่มขึ้น ความถี่. หลังจากสำรวจรายการที่เชื่อมโยง เราจะตรวจสอบค่าในแผนที่แฮชที่มีความถี่การเกิดเป็นหนึ่ง และส่งคืนค่าแรกที่พบ
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include<bits/stdc++.h> using namespace std; struct Node{ int data; struct Node* next; }; void push(struct Node** head_ref, int new_data){ struct Node* new_node = (struct Node*) malloc(sizeof(struct Node)); new_node->data = new_data; new_node->next = (*head_ref); (*head_ref) = new_node; } int findFirstNonRepLL(struct Node *head){ unordered_map<int, int> freqMap; for (Node *temp=head; temp!=NULL; temp=temp->next){ freqMap[temp->data]++; } for (Node *temp=head; temp!=NULL; temp=temp->next){ if (freqMap[temp->data] == 1){ return temp->data; } } return -1; } int main(){ struct Node* head = NULL; push(&head, 5); push(&head, 6); push(&head, 2); push(&head, 1); push(&head, 4); push(&head, 2); push(&head, 6); push(&head, 4); cout<<"The first non repeating element of the linked list is "<<findFirstNonRepLL(head); return 0; }
ผลลัพธ์
The first non repeating element of the linked list is 1