[C++] 리스트 inverting 체인연산

2022. 10. 24. 00:00·Programming/C++
#include <iostream>

typedef struct listNode *listPtr;
typedef struct listNode
{
    char data;
    listPtr link;
}listNode;

listPtr invert(listPtr lead)
{
    listPtr middle, tail;
    middle = NULL;

    // 여기서 쓰이는 lead, middle, tail 은 임시로 거쳐가는 변수임.
    while(lead)
    {
        tail = middle;          // tail 은 middle 을 취함.
        middle = lead;          // middle 은 lead 를 취함.
        lead = lead->link;      // lead는 lead 의 link 를 취함.
        
        middle->link = tail;    // tail 부분은 middle 부분보다 앞부분의 Link 일것임. 때문에 이 부분을 할당함.
    }

    return middle;
}

int main()
{
    listPtr l1, l2, l3, l4, l5;

    l1 = new listNode();
    l2 = new listNode();
    l3 = new listNode();
    l4 = new listNode();
    l5 = new listNode();
    
    l1->data = 'a';
    l2->data = 'b';
    l3->data = 'c';
    l4->data = 'd';
    l5->data = 'e';

    l1->link = l2;
    l2->link = l3;
    l3->link = l4;
    l4->link = l5;
    l5->link = NULL;

    auto link = l1;

    while(link != NULL)
    {
        std::cout << link->data << std::endl;
        link = link->link;
    }
    
    std::cout << " ====================== " << std::endl;
    listPtr lp = invert(l1);
    link = lp;

    while(link != NULL)
    {
        std::cout << link->data << std::endl;
        link = link->link;
    }

    return 0;
}

알고리즘 수업 도중 언급된 예제 코드가 머리로는 대충 이해 되지만 실제 동작 코드가 궁금하여 찾아 본 다음 수정해서 올려본다.

list inverting 연산이란 말 그대로 list 를 뒤집는 연산이다. 핵심적인 부분은 invert 함수의 while 부분으로 tail, middle, head 부분을 뒤집어 역순으로 chaining 한다는 부분만 이해하면 된다.

저작자표시 비영리 동일조건 (새창열림)

'Programming > C++' 카테고리의 다른 글

C# C++ 간 이벤트 발생시키기.  (0) 2022.06.03
[C++] Char * vs Char []  (0) 2021.11.25
[C++] std::thread 를 멈추는 방법  (0) 2021.09.18
[C++] std::thread vs std::async  (0) 2021.09.17
[C++] 동적 라이브러리 vs 정적 라이브러리 개인 의견  (0) 2021.08.22
'Programming/C++' 카테고리의 다른 글
  • C# C++ 간 이벤트 발생시키기.
  • [C++] Char * vs Char []
  • [C++] std::thread 를 멈추는 방법
  • [C++] std::thread vs std::async
Cyp
Cyp
  • Cyp
    Cyp Software Blog
    Cyp
  • 전체
    오늘
    어제
    • Cyp Blog (162) N
      • Artificial Intelligence (39) N
        • Article (20) N
        • Post (2)
        • Basic (14)
        • Preferences (3)
      • Cyber Security (1)
      • Programming (46)
        • C++ (21)
        • C# (19)
        • Python (2)
        • Rust (0)
        • Java (1)
      • Algorithm (17)
        • BACKJOON (15)
      • Operating System (14)
        • WSL (2)
        • Windows (1)
        • Linux (5)
        • Security (3)
      • Tools (26)
        • Docker (3)
        • DataBase (2)
        • SSH (1)
        • Doxygen (2)
        • Etc (17)
      • Miscellaneous (19)
        • Book (2)
        • Hardware (2)
        • Hevel (1)
  • 블로그 메뉴

    • Home
    • Guest Book
  • 링크

  • 공지사항

    • 블로그 업데이트 노트
    • 블로그 운영방침
  • 인기 글

  • 태그

    Bom
    C4819
    utf-8 bom
    y-cruncher
    UTF-8 without BOM
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Cyp
[C++] 리스트 inverting 체인연산
상단으로

티스토리툴바