특정 노드의 인덱스를 바탕으로 값을 조회하는 것에는 어레이가 좋습니다.
class LinkedList:
def __init__(self):
self.head = None
def append(self, val):
# 헤드가 없을 때
if not self.head:
# 헤드로 지정
self.head = ListNode(val, None)
return
# node를 head로 설정한 다음, next가 없을 때까지 계속 node를 한 칸씩 이동 시킴
node = self.head
while node.next:
node = node.next
# next가 없는 마지막 노드에 도착했다면, 마지막 노드의 next를 ListNode로 지정하여, 새로운 마지막 노드를 추가함
node.next = ListNode(val, None)
# ln = LinkedList()
# ln.append(3)
# ln.append(5)
# ln.append(7)
#
# print(ln)
from linked_list import LinkedList
from prac import isPalindrome
l1 = LinkedList()
for num in [1, 2, 2, 1]:
l1.append(num)
l2 = LinkedList()
for num in [1, 2]:
l2.append(num)
# testcase
# assert는 기본값이 true
assert isPalindrome(l1)
assert not isPalindrome(l2)
assert
를 이용해서 테스트 케이스 2가지를 만들었습니다.# 팰린드롬 연결 리스트: 주어진 리스트가 팰린드롬인지 판별하는 프로그램을 작성하세요.
def isPalindrome(ln):
arr = []
head = ln.head
if not head:
return True
# head가 없다면, list 안에 없는 것이기때문에 True를 바로 반환합니다.
node = head
# 링크드 리스트를 구현합니다.
while node:
arr.append(node.val)
node = node.next
# pop을 이용하여, arr 안에 아무런 값이 남지 않을 때까지 맨 앞과 뒤에서 하나씩 빼며 팰린드롬 여부를 판정합니다.
while len(arr) > 1:
first = arr.pop(0)
last = arr.pop()
if first != last:
return False
return True