Circle List(써클 리스트)

2023. 10. 10. 19:22· 코딩/파이썬
목차
  1. 💻 기본 구조
  2. 💻 노드 넣기
  3. 💻 노드 삭제
  4. 💻 노드 출력
반응형
반응형

📒 서클 리스트(Circle List)

💻 기본 구조


💻 노드 넣기

노드를 넣는데에는 5가지 경우가 있다.

  1. 첫 노드일 때
    1-1. 노드가 있는 상태에서 헤드 다음으로 넣을 때
  2. 중간에 넣을때
  3. 마지막에 넣을때
    3-1. 마지막 직전에 넣을 때

def add_node(data):
    global head

    node = Node()
    node.data = data

    temp = head 
    # 노드가 없을때
    if not head:
        head = node
        node.link = head
        return
    # head 앞에 삽입할 때, 오름차순 정렬이기 때문에 
    # head의 데이터 즉 처음 데이터보다 작다는 것은
    # 가장 앞에 들어간다는 의미
    elif temp.data > node.data:
        node.link = temp
        # 가장 뒤에 있는 노드의 link를 가장 앞의 노드로 옮겨야 하기 때문에
        # 마지막 노드로 이동 후 마지막 노드.link를 현재 head앞에
        # 추가하는 노드와 연결한다.
        while temp.link != head:
            temp = temp.link

        temp.link = node
        head = node
        return

    temp = head
    while temp.link != head:
        # 노드 앞에 삽입
        if temp.data > node.data:
            prev.link = node
            node.link = temp
            return
        # 삽입 안함(다음으로 넘어가기)
        else:
            # 현재 노드
            prev = temp
            # 다음 노드로 넘어감
            temp = temp.link

    # 마지막 노드로 왔는데 마지막 노드의 데이터가 더 클때 앞에 넣음
    if temp.data > node.data:
        node.link = temp
        prev.link = node
    else:
        temp.link = node
        node.link = head

💻 노드 삭제

노드 삭제에는 3가지 경우가 있다.

  1. 처음 노드일 때
  2. 중간 노드일 때
  3. 마지막 노드일 때
   def delete_node():
    global head

    data = int(input(''))
    temp = head
    # 삭제할 노드가 처음 노드일 때
    if head.data == data:
        temp = head
        # 마지막 노드로 이동
        # 마지막 노드의 다음 노드가 헤드일 때 끝나므로
        # 마지막 노드의 다음 노드 즉 처음 노드를 삭제한다.
        while temp.link != head:
            temp = temp.link
        head = head.link
        del temp.link

        temp.link = head
        return

    # 삭제할 노드가 중간에 있을 때
    temp = head
    while temp.link != head:
        if temp.data == data:
            prev.link = temp.link
            del temp
            return
        prev = temp
        temp = temp.link

    # 삭제할 노드가 마지막일 때
    prev.link = temp.link
    del temp

💻 노드 출력

def list_node():
    global head
    # cnt = 0
    temp = head
    while temp.link != head:
        print(temp.data)
        temp = temp.link
        if temp.link == head:
            print(temp.data)
반응형

'코딩 > 파이썬' 카테고리의 다른 글

BeautifulSoup 크롤링 속도 높이기  (1) 2023.10.10
Queue(큐)  (0) 2023.10.10
Double Linked List(더블 링크드 리스트)  (1) 2023.10.10
Linked List(링크드 리스트)  (0) 2023.10.10
파일 이름 특정 문자들을 일괄로 지우기(2)  (0) 2022.08.31
  1. 💻 기본 구조
  2. 💻 노드 넣기
  3. 💻 노드 삭제
  4. 💻 노드 출력
'코딩/파이썬' 카테고리의 다른 글
  • Queue(큐)
  • Double Linked List(더블 링크드 리스트)
  • Linked List(링크드 리스트)
  • 파일 이름 특정 문자들을 일괄로 지우기(2)
샐프
샐프
샐프
무엇이든
샐프
전체
오늘
어제
  • 분류 전체보기 (55)
    • 개발일지 (1)
    • 이것저것 개발 (2)
    • 코딩 (30)
      • 디스코드 (6)
      • 파이썬 (16)
      • 기타 (8)
    • 아무거나 만들어 봄 (20)
      • 제목으로 장르 분류하기 (8)
      • 파일 빨리 옮기기 (2)
      • kBO 크롤링 (2)
      • KBO 타자 OPS 예측 경진대회 (8)
    • 알고리즘 (2)
      • 프로그래머스 (0)
      • 백준 (0)
      • [프로그래머스] 내일은 코딩테스트 with 파이썬 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 파이썬 데이터프레임
  • boxplot
  • 콘다 오류
  • ebook drm
  • 0x80041002
  • yes24 ebook 뷰어
  • yes24 ebook
  • 동적 크롤링
  • 셀레니움
  • pyqt5 연결
  • drm 제거
  • 파이썬
  • 동적 페이지 크롤링
  • 데이콘
  • designer 연결
  • designer 연동
  • conda activate error
  • PyQt5
  • ebook to pdf
  • csv 한글 깨짐
  • ebook pdf 추출
  • 파일 이름 변경
  • jupyter 서버
  • ebook 뷰어
  • 문자 지우기
  • 도커
  • yes24 ebook pdf 추출
  • kbo 크롤링
  • wsl2
  • pyqt5-designer

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
샐프
Circle List(써클 리스트)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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