์๋ ํ์ธ์ ์ฃผ์ธ์ฅ H์ ๋๋ค. ์ค๋์ ๋ฆฌ์คํธ๋ฅผ ๊ฑฐ๊พธ๋ก ๋ง๋ค์ด์ฃผ๋ ์ฝ๋๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค.
์ฐ๊ฒฐ๋ฆฌ์คํธ(linked list๋ฅผ ์ ๋ชจ๋ฅด์ ๋ค๋ฉด) modernalchemist.tistory.com/39?category=921458
์์ ๊ธ์ ์ฝ๊ณ ์ค์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
์ผ๋จ ์ฝ๋ ๋จผ์ ๋ณด๊ฒ ์ต๋๋ค.
ListNode* reverse(ListNode* head)
{
// ์ํ ํฌ์ธํฐ๋ก p, q, r์ ์ฌ์ฉ
ListNode* p, * q, * r;
p = head; // p๋ ์ญ์์ผ๋ก ๋ง๋ค ๋ฆฌ์คํธ
q = NULL; // q๋ ์ญ์์ผ๋ก ๋ง๋ค ๋
ธ๋
while (p != NULL) {
r = q; // r์ ์ญ์์ผ๋ก ๋ ๋ฆฌ์คํธ.
// r์ q, q๋ p๋ฅผ ์ฐจ๋ก๋ก ๋ฐ๋ผ๊ฐ๋ค.
q = p;
p = p->link;
q->link = r; // q์ ๋งํฌ ๋ฐฉํฅ์ ๋ฐ๊พผ๋ค.
}
return q;
}
์ด ์ฝ๋๋ง ๋ณด์ ๋ค๋ฉด ์ดํด๊ฐ ์๊ฐ์คํ ๋ฐ์ ๊ทธ๋ฆผ์ ์ถ๊ฐํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ธฐ์กด์ ๋ ธ๋๋ฅผ ๊ฐ๋ฅดํค๋ ํฌ์ธํฐ๋ฅผ ์ผ์ชฝ์ผ๋ก ๋ชฐ์๋ฃ์ด ์ค๋ฅธ์ชฝ์ผ๋ก ํ ๋ ธ๋์ฉ ์ฌํํธ ์ํค๋ฉด์ ์๋กญ๊ฒ link๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์์ ์ ๊ทธ๋ฆผ์ฒ๋ผ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค. ์ด๋ฅผ ์ ์ฉํ ์ ์ฒด ์์ ๋ฅผ ๋ณด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//
typedef int element;
//
typedef struct ListNode { // ๋
ธ๋ ํ์
์ ๊ตฌ์กฐ์ฒด๋ก ์ ์ํ๋ค.
element data;
struct ListNode* link;
} ListNode;
// ์ค๋ฅ ์ฒ๋ฆฌ ํจ์
void error(char* message)
{
fprintf(stderr, "%s\n", message);
exit(1);
}
//
ListNode* insert_first(ListNode* head, element value)
{
ListNode* p = (ListNode*)malloc(sizeof(ListNode));//(1)
p->data = value;//(2)
p->link = head; // ํค๋ ํฌ์ธํฐ์ ๊ฐ์ ๋ณต์ฌ//(3)
head = p; // ํค๋ ํฌ์ธํฐ ๋ณ๊ฒฝ//(4)
return head;
}
//
void print_list(ListNode* head)
{
for (ListNode* p = head; p != NULL; p = p->link)
printf("%d->", p->data);
printf("NULL \n");
}
//
ListNode* reverse(ListNode* head)
{
// ์ํ ํฌ์ธํฐ๋ก p, q, r์ ์ฌ์ฉ
ListNode* p, * q, * r;
p = head; // p๋ ์ญ์์ผ๋ก ๋ง๋ค ๋ฆฌ์คํธ
q = NULL; // q๋ ์ญ์์ผ๋ก ๋ง๋ค ๋
ธ๋
while (p != NULL) {
r = q; // r์ ์ญ์์ผ๋ก ๋ ๋ฆฌ์คํธ.
// r์ q, q๋ p๋ฅผ ์ฐจ๋ก๋ก ๋ฐ๋ผ๊ฐ๋ค.
q = p;
p = p->link;
q->link = r; // q์ ๋งํฌ ๋ฐฉํฅ์ ๋ฐ๊พผ๋ค.
}
return q;
}
// ํ
์คํธ ํ๋ก๊ทธ๋จ
int main(void)
{
ListNode* head = NULL;
printf("> head list ์์ฑ.\n");
head = insert_first(head, 10);
print_list(head);
head = insert_first(head, 20);
print_list(head);
head = insert_first(head, 30);
print_list(head);
printf("> After concat.\n");
head = reverse(head);
print_list(head);
return 0;
}
'์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C์ธ์ด] ์ฐ๊ฒฐ๋ฆฌ์คํธ์์ ํน์ ํ ๊ฐ ํ์ํ๊ธฐ(๋ ธ๋ ํ์ ์๊ณ ๋ฆฌ์ฆ) (1) | 2020.11.06 |
---|---|
[C์ธ์ด] ๋จ์ด๋ค์ ์ ์ฅํ๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ (0) | 2020.11.06 |
[C์ธ์ด] ์ฐ๊ฒฐ๋ฆฌ์คํธ (linked list) (0) | 2020.11.06 |
[C์ธ์ด] ๋ฐฐ์ด๋ก ๊ตฌํํ ๋ฆฌ์คํธ (0) | 2020.11.06 |
[์๋ฃ๊ตฌ์กฐ] counting sort ๊ณ์์ ๋ ฌ (0) | 2020.08.18 |