KoreanFoodie's Study
기술면접 알고리즘 [Linked List] : 링크드 리스트 스트링 비교 (Compare two strings represented as linked lists) 본문
Data Structures, Algorithm/GeeksForGeeks
기술면접 알고리즘 [Linked List] : 링크드 리스트 스트링 비교 (Compare two strings represented as linked lists)
GoldGiver 2022. 1. 24. 15:00
기술면접과 코딩테스트 준비를 위해 꼭 알아야 할 기초 알고리즘 관련 개념들과 코드를 정리하고 있습니다.
각 주제들은 GeeksForGeeks 의 Top 10 algorithms in Interview Questions 글에서 발췌하였습니다.
링크드 리스트 스트링 비교
string 을 링크드 리스트로 표현했다고 했을때, 다음과 같이 스트링을 비교하는 함수를 구현해 보자. 단, 투 포인터를 이용하여 순회한다.
#include <stdio.h>
#include <memory>
#include <iostream>
struct Node {
char data;
Node* next;
Node(char data) : data{data}, next{nullptr} {}
};
struct List {
List() : head{nullptr} {}
void insert(char x) {
Node* newNode = new Node(x);
if (!head) {
head = std::move(newNode);
return;
}
newNode->next = head;
head = newNode;
}
int compare(List& a) {
Node* left = this->head;
Node* right = a.head;
while (left && right) {
if (left->data > right->data)
return 1;
else if (right->data > left->data)
return -1;
else {
left = left->next;
right = right->next;
}
}
// if length are same
if (!left && !right) {
return 0;
} else if (!left) {
return -1;
} else return 1;
}
friend std::ostream& operator<<(std::ostream &os, const List &list);
private:
Node* head;
};
std::ostream& operator<<(std::ostream &os, const List &list) {
Node* temp = list.head;
if (!temp) {
std::cout << "Linked list is empty" << std::endl;
return os;
}
while (temp) {
os << temp->data << " ";
temp = temp->next;
}
os << std::endl;
return os;
}
int main()
{
List l;
l.insert('1');
l.insert('t');
l.insert('u');
l.insert('n');
l.insert('h');
l.insert('s');
l.insert('a');
l.insert('h');
std::cout << l;
List r;
r.insert('2');
r.insert('t');
r.insert('u');
r.insert('n');
r.insert('h');
r.insert('s');
r.insert('a');
r.insert('h');
std::cout << r;
std::cout << l.compare(r) << std::endl;
return 0;
}
'Data Structures, Algorithm > GeeksForGeeks' 카테고리의 다른 글
기술면접 알고리즘 [Linked List] : 링크드 리스트 덧셈 (Add two numbers represented by linked lists) (0) | 2022.01.24 |
---|---|
기술면접 알고리즘 [Linked List] : 링크드 리스트 노드 삭제 (Linked List Node deletion) (0) | 2022.01.24 |
기술면접 알고리즘 [Linked List] : 링크드 리스트 정렬 삽입 (Linked List insert in sorted way) (0) | 2022.01.24 |
기술면접 알고리즘 [Graph] : 단절선 (Articulation Edge) (0) | 2022.01.24 |
기술면접 알고리즘 [Graph] : Boggle (Array Board 에서 단어 찾기) (0) | 2022.01.24 |
Comments