Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- #내일배움단 #코딩프로젝트 #국비지원 #내일배움카드 #스파르타코딩클럽
- 부트스트랩 #Bootstrap #웹개발첫걸음 #스파르타코딩클럽
- 항해99솔직후기 #항해99 #부트캠프추천
- 스파르타코딩클럽 #크롤링 #스크래핑
- 스파르타코딩클럽 #코딩 #jQuery #Ajax
Archives
- Today
- Total
이모저모
leetcode 206 - Reverse Linked List 본문
첫 시도..
아무래도 아직 나는 출력을 해보면서 해야 한다^^ 어제 파이썬으로 리스트 노드/연결리스트 구현하는 강의를 들었어서 그 코드를 활용해서 파이참에 프린트 해볼 수 있었다..!
from typing import List
class ListNode:
def __init__(self, val):
self.val = val # 노드는 값을 갖는 부분과
self.next = None # 다음 자료를 가리키는 부분으로 이루어진다.
def createLinkedList(in_list: List[int]) -> ListNode: # List[int]를 ListNode 로 리턴하는 함수.
if len(in_list) == 0:
raise RuntimeError("in_list must have data")
head_node = ListNode(in_list[0])
last_node = head_node
for idx in range(1, len(in_list)):
node = ListNode(in_list[idx])
last_node.next = node
last_node = node
return head_node
def printNodes(node: ListNode):
crnt_node = node
while crnt_node is not None:
print(crnt_node.val, end=" ")
crnt_node = crnt_node.next
#############################################################
# 문제 - reverse linked list
# Input: head = [1,2,3,4,5]
# Output: [5,4,3,2,1]
#############################################################
# 재료(?)
head = createLinkedList([1,2,3,4,5])
#############################################################
from collections import deque
## 처음 시도한 코드
def get_reversed_list(head: ListNode):
crnt_node = head
deq = deque()
while crnt_node is not None:
deq.appendleft(crnt_node.val)
crnt_node = crnt_node.next
reversed_list = list(deq)
print(reversed_list) # 여기까지만 오면 그냥 리스트 형태로 내보내는 것.
## 다시 연결리스트로 만드려면
head_node = ListNode(reversed_list[0])
last_node = head_node
for i in range(1, len(reversed_list)): # 두 번째 노드가 될 요소부터 마지막 노드가 될 요소까지.
node = ListNode(reversed_list[i]) # 자신을 노드로 만들고
last_node.next = node # 지금까지 마지막 노드 였던 아이의 뒤로 자기 자신을 붙이고,
last_node = node # 자기 자신은 마지막 노드로 자리잡아 두기.
return head_node
reversed_head_node = get_reversed_list(head)
printNodes(reversed_head_node)
### 런타임 에러가 났다. 재료를 넣어서 실행하지 않는 이상 코드만 봐서는 reversed_list[0]이 존재하지 않으니까.
### 그래서 이렇게 저렇게 런타임 에러만 없애보자는 시도를 몇 번 더 하다가 아래 코드로는 제출되었다.
### 그러나.. 시간이 오래 걸린다아..ㅎㅎㅎ 다른 분들 코드도 보면서 시간도 줄일 수 있도록 연습해야겠다.
def get_reversed_list(head: ListNode):
crnt_node = head
deq = deque()
while crnt_node is not None:
deq.appendleft(crnt_node.val)
crnt_node = crnt_node.next
reversed_list = list(deq)
print(reversed_list) # 여기까지만 오면 그냥 리스트 형태로 내보내는 것.
## 다시 연결리스트로 만드려면
if len(reversed_list) == 0:
head_node = None
else:
head_node = ListNode(reversed_list[0]) # -> 이렇게만 하면 runtime error 가 발생한다.
last_node = head_node
for i in range(1, len(reversed_list)): # 두 번째 노드가 될 요소부터 마지막 노드가 될 요소까지.
node = ListNode(reversed_list[i]) # 자신을 노드로 만들고
last_node.next = node # 지금까지 마지막 노드 였던 아이의 뒤로 자기 자신을 붙이고,
last_node = node # 자기 자신은 마지막 노드로 자리잡아 두기.
return head_node
창피하지만... 나중에 언젠가 발전한 내가 뿌듯하지 않을까 ... 라고 생각하면서.
'coding > 알고리즘,자료구조' 카테고리의 다른 글
linked list 다루는 연습 - 가운데 노드 찾기 (0) | 2022.01.17 |
---|---|
leetcode - merge two sorted lists (0) | 2022.01.17 |
linked list - 특정 값을 갖는 노드 제거하기 (1)재귀적 방법 (0) | 2022.01.17 |
Linked List _ singly linked list python 구현 (0) | 2022.01.16 |
leetcode - 빗물트래핑 - 투포인터 방식 주석달아보기! (0) | 2022.01.15 |
Comments