Q : 단방향 연결 리스트가 주어졌을 때 뒤에서 k번째 원소를 찾는 알고리즘을 구현하라.
...더보기
// linked_list.h
#include <iostream>
struct node {
int data;
node *next;
};
class linked_list {
private:
node *head, *tail;
public:
linked_list() {
head = NULL;
tail = NULL;
}
void add_node(int n) {
node *temp = new node;
temp->data = n;
temp->next = NULL;
if (head == NULL) {
head = temp;
tail = temp;
}
else {
tail->next = temp;
tail = tail->next;
}
}
node* first() {
return head;
}
};
#include <iostream>
#include "LinkedList.h"
int SearchKthNode(linked_list list, int k) {
node *front, *end;
front = end = list.first();
for (int i = 0; i < k; i++) {
end = end->next;
if (end == NULL) return front->data;
}
while (end != NULL) {
end = end->next;
front = front->next;
}
return front->data;
}
int main() {
linked_list list;
list.add_node(1);
list.add_node(2);
list.add_node(1);
list.add_node(5);
list.add_node(4);
list.add_node(4);
list.add_node(1);
list.add_node(5);
int K;
scanf_s("%d", &K);
printf("%d\n", SearchKthNode(list , K));
}
2개의 노드 포인터를 만들고 거리를 k만큼 벌려놓는다.
그 후 뒤쪽에 있는 노드가 NULL이 될 때까지 (리스트의 끝까지) 2개의 포인터를 전진시킨다.
이때 앞쪽에 있는 노드가 뒤에서 k번째 노드가 된다.
'문제 풀기 > 코딩인터뷰' 카테고리의 다른 글
[코딩인터뷰 완전정복] 2.4 분할 (0) | 2019.05.13 |
---|---|
[코딩인터뷰 완전정복] 2.3 중간 노드 삭제 (0) | 2019.05.13 |
[코딩인터뷰 완전정복] 2.1 중복 없애기 (0) | 2019.05.10 |
[코딩인터뷰 완전정복] 1.9 문자열 회전 (0) | 2019.05.10 |
[코딩인터뷰 완전정복] 1.8 O행렬 (0) | 2019.05.10 |