아래 함수를 구현 하자!

Node* Reverse_List(Node* head);

연결리스트가 주어질 경우 역순으로 연결리스트를 구성하는 것이다.

문제 해결을 위해서는 p, q, r 노드가 필요하다.

스탭 1.PNG

스탭 2.PNG

스탭 3.PNG

이런 식으로 r에 q를 넣고 q에 p를 넣고 p = p.link, q.link =r 을 반복하면 역순 리스트가 만들어진다.

Node* Reverse_List(Node* head) {
    Node* p = head; /*p 노드에 head를 넣음 */
    Node* q = NULL;
    Node* r = NULL;
    while (p != NULL) { /*q를 역순 연결리스트로 만든다. */
        r = q; 
        q = p;
        p = p->link;
        q->link = r;
    }
    return q;
}

결과

결과 1.PNG

과제에 대한 고찰

처음에는 역순을 만들 때 모든 링크를 반대로 돌려야 하나라고 생각했고 또 예전에 temp라는 변수를 만들고 a와 b를 변환하는 문제가 생각나서 변수 두개로 역순을 만드려니 잘 되지 않았다 하지만 저렇게 변수 3개로 만들면 되는 것을 알고 난 후에는 쉽게 구현 할 수 있었다. 원리만 이해하면 어려운 과제는 아니였던거 같다.