반응형
리스트 역순 만들기
Node *reverse(Node *head)
{ // 순회 포인터로 p, q, r을 사용
Node *p, *q, *r;
p = head; // p는 현재 가리키는 노드, q는 이전 노드
q = NULL;
while (p != NULL){
r = q; // r은 q, q는 p를 차례로 따라간다.
q = p;
p = p->link; // p를 미리 옮겨 놓자.
q->link = r; // q의 링크 방향을 바꾼다.
}
head = q; // q는 역순으로 된 리스트의 헤드 포인터
return head;
}
예제) 연결 리스트 역순 만들기
#include <iostream>
using namespace std;
class Node {
public:
int score; //점수
Node *link; //다음 노드 주소
};
Node *Head = NULL;
//리스트 마지막에 노드 삽입 방법
void insert_at_rear(Node *new_node) {
if (Head == NULL) {
Head = new_node;
}
else {
//마지막 노드를 찾고, 그 노드 뒤에 new_node 연결
Node *list = Head; //list는 포인터이며 초기값은 head
while (list->link != NULL) //list의 link값이 null일 경우 끝남
list = list->link;
list->link = new_node;
}
}
//리스트 처음에 노드 삽입 방법
void insert_node_at_front(Node *new_node)
{
new_node->link = Head;
Head = new_node;
}
Node *MakeNewNode(int score) { //노드를 하나 동적 할당, 값 초기화
Node *ptr;
ptr = new Node();
ptr->score = score;
ptr->link = NULL;
return ptr;
}
void printNodes() {
for (Node *list = Head; list != NULL; list = list->link)
//list != NULL 뜻: 리스트가 뭔가를 가리키고 있으면. list == NULL 뜻: 리스트가 가리키는 방이없다는 뜻
cout << list->score << endl;
}
void findNode(int score) {
for (Node *list = Head; list; list = list->link)
//C언어에서는 0만을 거짓으로 본다. 따라서 list != NULL을 그냥 list로 쓰는 경우도 있다.
if (list->score == score)
cout << "I found it : " << list->score << endl;
}
//리스트 역순 만들기
void reverseList() {
Node *p, *q, *r;
p = Head; // p는 현재 가리키는 노드, q는 이전 노드
q = NULL; //r = NULL;
while (p != NULL) {
r = q; // r은 q, q는 p를 차례로 따라간다.
q = p;
p = p->link; // p를 미리 옮겨 놓자.
q->link = r; // q의 링크 방향을 바꾼다.
}
Head = q; // q는 역순으로 된 리스트의 헤드 포인터
//return Head;
}
void main() {
Node *new_node;
int std_num; //학생수
cout << "Student Number : ";
cin >> std_num; //학생 수 입력
for (int i = 0; i < std_num; i++)
{
int score;
cout << "Student #" << i + 1 << " : ";
cin >> score;
//노트 생성, 연결리스트에 추가
new_node = MakeNewNode(score);
insert_at_rear(new_node);
}
printNodes();
reverseList();
cout << "AFTER REVERSING" << endl;
printNodes();
}
반응형
'공부 > 자료구조 | 알고리즘' 카테고리의 다른 글
[자료구조] 이중연결리스트 Doubly Linked List (0) | 2019.08.17 |
---|---|
[자료구조] 연결리스트 다항식 덧셈 Linked List (0) | 2019.08.05 |
[자료구조] 연결리스트 노드 삭제 (0) | 2019.08.03 |
[자료구조] 연결리스트 만들고 출력하기 Linked List (0) | 2019.08.01 |
[자료구조] 단순 연결리스트 노드 삽입 (0) | 2019.07.30 |