연결리스트(Linked list) 마지막에서 두번째 데이터 출력 - C 언어

2021. 4. 9. 20:06·C
목차
  1. 마지막에서 두 번째 데이터만 출력하기
728x90
반응형

tildacoderecorder.tistory.com/96

 

[자료구조] C언어 연결리스트(Linked list) 생성 / 출력

연결리스트 만들기 "월" "화" "수" "목" "금" 등 요일을 데이터값으로 갖는 연결리스트를 만들어보자. typedef struct node {         char data;         struct node* next;     } ..

tildacoderecorder.tistory.com

저번 글에서 연결리스트의 생성과 출력에 대한 기본적인 것들에 대해 알아봤다.

이번 글에서는 조건이 있는 출력에 대해 알아볼 것이다.

*예제에 쓰인 연결리스트는 전 글의 연결리스트와 동일

 

마지막에서 두 번째 데이터만 출력하기

 

마지막에서 두번째만 출력하기 위해서는 먼저 세 가지 조건을 살펴봐야한다.

1. 연결리스트에 다른 노드 없이 head만 있을 경우

2. head와 노드 하나, 딱 두 가지만 있을 경우

3. 노드가 여러개인 연결 리스트일 경우

head에는 데이터 값이 담겨있지 않기 때문에 1번과 2번의 경우 마지막에서 두번째 노드의 값을 출력할 수 없다.

 

typedef struct node {
    char data;
    struct node* next;
} Node;
 
Node* head;
 
void Print_Second_Last() {
    Node* tmp = head, * pre = NULL;
 
    if (head == NULL) {
        printf("ERROR!!");
        return;
    }
 
    if (head->next == NULL) {
        printf("ERROR!!");
        return;
    }
 
    while (tmp->next != NULL) {
        pre = tmp;
        tmp = tmp->next;
    }
 
    printf("%s", pre->data);
}
Colored by Color Scripter
cs

 

마지막에서 두번째 노드를 찾으려면 마지막 노드를 찾을 변수와 그 변수의 뒷 노드를 가리킬 변수, 총 두가지가 필요하다.

구조체 포인터 변수 tmp와 pre를 선언하고 tmp에 head 값을 담는다.

if문을 활용하여 위에서 언급한 조건 중 첫번째와 두번째에 해당될 때 ERROR 메세지를 출력하고 리턴시킨다.

tmp->next가 NULL이 아닐 때, pre는 tmp의 값을 담게 되고 tmp는 다음 노드로 넘어가게 된다.

 

while문을 그림으로 보자면 아래와 같다.

 

  1. tmp = head, pre = NULL. head는 node1를 가리키므로 tmp->next는 node1의 next를 가리킨다.
  2. node1의 next인 node2가 NULL이 아니므로 while문을 돌게 된다. pre 변수에 tmp값을  넣어주고 tmp = tmp->next로 tmp가 다음 노드를 가리키게 만든다면 pre는 node1을, tmp는 node2를 가리키게 된다.
  3. 2번째와 같은 과정으로 pre는 node2를, tmp는 node3을 가리키게 된다.
  4. tmp가 node3일 때 tmp->next는 NULL이므로 while문을 돌지 않고 종료하게 된다. pre는 node2를 가리키고 있으므로 pre->data를 출력하면 마지막에서 두번째 노드의 데이터 값을 출력할 수 있다.

 

 

참조 : C로 배우는 쉬운 자료구조 / 이지영 / 한빛아카데미

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'C' 카테고리의 다른 글

연결리스트(Linked list) 노드 삭제 - C 언어  (0) 2021.04.09
연결리스트(Linked list) 노드 삽입 - C 언어  (0) 2021.04.09
연결리스트(Linked list) 생성 / 출력 - C 언어  (0) 2021.04.09
포인터를 이용한 swap 함수 만들기 - C 언어  (0) 2021.03.03
C - While문 이용하여 *별로 삼각형 만들기 3  (0) 2020.10.08
  1. 마지막에서 두 번째 데이터만 출력하기
'C' 카테고리의 다른 글
  • 연결리스트(Linked list) 노드 삭제 - C 언어
  • 연결리스트(Linked list) 노드 삽입 - C 언어
  • 연결리스트(Linked list) 생성 / 출력 - C 언어
  • 포인터를 이용한 swap 함수 만들기 - C 언어
waVwe
waVwe
    반응형
  • waVwe
    waVwe 개발 블로그
    waVwe
  • 전체
    오늘
    어제
    • ALL (184)
      • Python (1)
      • Spring (15)
      • DevOps (10)
      • Git (6)
      • JAVA (4)
      • C (22)
      • 코테 문제 풀이 (124)
        • 프로그래머스 (43)
        • 백준 (2)
        • 정올 (64)
        • SW Expert Academy (1)
        • 온코더 oncoder (14)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 🐙 Github
  • 공지사항

  • 인기 글

  • 태그

    자바
    도커
    progate
    스파르타코딩클럽
    연결리스트
    온코더
    이진트리
    깃헙
    docker
    알고리즘
    springboot
    devops
    내일배움캠프
    아파치카프카
    C
    CI/CD
    자료구조
    MSA
    Til
    스파르타코딩
    형변환
    java
    프로그래머스
    깃
    코테
    정올
    while문
    C언어
    스프링
    스프링부트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
waVwe
연결리스트(Linked list) 마지막에서 두번째 데이터 출력 - C 언어
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.