언어/Python

파이썬 알고리즘 - 링크드리스트(LinkedList) 회문(대칭) 출력

2017. 8. 27. 19:05

개발자 면접 트레이딩 - 파이썬 알고리즘 문제(10)



 

(1). 개발자 면접 트레이닝 - 링크드리스트(LinkedList) 회문(대칭) 출력하기


① 링크드리스트(LinkedList)를 역으로 출력하는 것이 포인트

② 링크드리스트를 정확히 생성하고 역으로 출력하는 것이 중요

③ 링크드리스트의 회문(역)을 리턴

④ 예를들어 [2, 3, 5, 3, 2]  의 회문은 [2, 3, 5, 3, 2] 으로써 결과값은 같다.

 

 

(2). 소스 코드


PYTHON

#palindrome_linkedlist.py
import unittest

class Node:
    def __init__(self, item):
        self.val = item
        self.next = None

class LinkedList:
    def __init__(self, item):
        self.head = Node(item)

    def add(self, item):
        cur = self.head
        while cur.next is not None:
            cur = cur.next
        cur.next = Node(item)

    def getHead(self):
        return self.head

    def reverse(self):
        prev = None
        cur = self.head
        while cur is not None:
            next = cur.next
            cur.next = prev
            prev = cur
            cur = next
        self.head = prev

    def printlist(self):
        cur = self.head
        res = []
        while cur is not None:
            res.append(cur.val)
            cur = cur.next
        return str(res)

def solution(list):
    input = list.printlist()
    list.reverse()
    output = list.printlist()
    if input == output:
        return True
    else:
        return False

class LinkedListTest(unittest.TestCase):
    def test(self):
        list1 = LinkedList(2)
        list1.add(3)
        list1.add(5)
        list1.add(3)
        list1.add(2)

        list2 = LinkedList(3)
        list2.add(6)
        list2.add(8)

        self.assertEqual(True, solution(list1))
        self.assertEqual(False, solution(list2))

unittest.main()























 

(3). 소스 코드 분석


① 14 라인 : 헤드(Head) 노드 선언

② 24 라인 : 현재 링크드리스트(LinkedList)의 헤드 반환 함수 선언

③ 28 라인 : 링크드리스트를 회문(역)으로 만드는 메소드 선언

④ 39 라인 : 회문(역)으로 만들어진 링크드리스트를 문자열로 변환

⑤ 49 라인 : 두 링크드리스트를 비교하는 메소드 선언

⑥ 59 ~ 끝 : 링크드리스트(LinkedList) 선언 및 assertEqula 단위 테스트 함수를 사용하여 입력 결과와 출력결과를 비교

 


LinkedList(링크드리스트)
 관련 알고리즘 문제는 자주 활용, 출제 되므로 Java, C  등으로 작성해보자.

 


(4). 실행결과1 - 단위테스트 정상 출력(회문 비교 결과 같을 경우)

 

 

(5). 실행결과2 - 단위테스트 에러 출력(회문 비교 다를 경우)


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

'언어 > Python' 카테고리의 다른 글

파이썬 알고리즘 - 스택(Stack)을 Set(리스트)으로 구현하기  (0) 2017.08.29
파이썬 알고리즘 - 스택(Stack)에서 최소값 출력하기  (0) 2017.08.28
파이썬 알고리즘 - 두 링크드리스트(LinkedList)의 합(SUM) 계산  (0) 2017.08.25
파이썬 알고리즘 - 선택 노드를 기준으로 링크드리스트(LinkedList) 분할  (0) 2017.08.24
파이썬 알고리즘 - 링크드리스트(LinkedList)에서 끝 에서 N 번째 값  (0) 2017.08.22
'언어/Python' 카테고리의 다른 글
  • 파이썬 알고리즘 - 스택(Stack)을 Set(리스트)으로 구현하기
  • 파이썬 알고리즘 - 스택(Stack)에서 최소값 출력하기
  • 파이썬 알고리즘 - 두 링크드리스트(LinkedList)의 합(SUM) 계산
  • 파이썬 알고리즘 - 선택 노드를 기준으로 링크드리스트(LinkedList) 분할
[좋은사람]
[좋은사람]
좋은사람의 개발 노트 입니다.
[좋은사람]
좋은사람의 개발 노트
[좋은사람]
전체
오늘
어제
  • 전체보기 (189)
    • 언어 (68)
      • Java (12)
      • Python (39)
      • C# (5)
      • PHP (4)
      • Go (8)
    • OS (18)
      • Linux (7)
      • Windows 10 (5)
      • Etc (6)
    • 빅데이터 & 분석 (8)
      • R (0)
      • Machine Learning (8)
    • 네트워크 (4)
      • Etc (4)
    • 웹 프론트 (25)
      • Javascript & ECMA (8)
      • Vue (13)
      • React (4)
    • 웹 백엔드 (15)
      • Spring (3)
      • Django & Flask (7)
      • Npm & Express (5)
    • 개발도구 (18)
      • Jetbrains (3)
      • Eclipse (5)
      • Git (4)
      • Atom & VScode (6)
    • 데이터베이스 (7)
      • Oracle (2)
      • MariaDB & MySQL (2)
      • Etc (3)
    • 모바일 (6)
      • Android (3)
      • Hybrid (3)
    • 라이프 (20)
      • 여행 & 일상 (6)
      • 취미 (14)

블로그 메뉴

  • 홈으로
  • 블로그소개
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Database
  • C#
  • 인텔리j
  • ps4
  • 리액트
  • Java
  • Eclipse
  • Thread
  • Linux
  • 코딩 면접
  • 3DS
  • javascript
  • flask
  • go
  • CFW
  • ubuntu
  • 미뮤
  • 개발자 면접
  • php
  • react
  • 이클립스
  • vue.js
  • SpringSTS
  • 디자인패턴
  • Git
  • npm
  • 아톰 에디터
  • nodejs
  • 2DS
  • OCR
  • Django
  • 윈도우10
  • 머신러닝
  • 커펌
  • python
  • ATOM
  • Anaconda
  • Algorithm
  • windows10
  • centos

최근 댓글

최근 글

hELLO · Designed By 정상우.
[좋은사람]
파이썬 알고리즘 - 링크드리스트(LinkedList) 회문(대칭) 출력
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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