ํฐ์คํ ๋ฆฌ ๋ทฐ
์ฐ๊ฒฐ ๋ฆฌ์คํธ (Linked List) - ๋๋ฏธ ๋ ธ๋ ์ถ๊ฐ
yeahajeong 2020. 6. 19. 10:01์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ํ์ ๋ฐํํ ๋
์ต๋ ์ฅ์ ์ฝ์ /์ญ์ ๊ฐ ์ ์ฐํ๋ค๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์์ฑํ ์ฝ๋๋ฅผ ๋ณด๋ฉด n๋ฒ์งธ์ ์๋ ๋ ธ๋๋ฅผ ์ฐพ์์ ์ฝ์ /์ญ์ ๊ฐ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ์ฒ์๋ถํฐ ๊ฐ์ ์ฐพ์๊ฐ๊ธฐ๊ฐ ๋ถ๋ด์ค๋ฌ์์ ๊ฐ๋จํ ์ผ์ ์๋๋ค. ๊ทธ๋์ ์ด๋ฌํ ๋ถ๋ด์ ์ค์ด๊ธฐ ์ํด ์กฐ๊ธ ๋ค๋ฅธ ๊ตฌ์กฐ์ ๋ฉ์๋๋ฅผ ๋ง๋ ๋ค.
- insertAfter(prev, newNode)
- popAfter(prev)
์ด๋ค ๋ ธ๋๋ฅผ ์ฃผ๊ณ ๊ทธ ๋ค์ ์๋ ๋ ธ๋๋ฅผ ์ฝ์ ์ญ์ ํ ์ ์๋๋ก ์ ์๋ฅผ ํ ๋ฉ์๋์ด๋ค. ํ์ง๋ง ๋งจ ์์์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผํ ์ง ์ ๋ํ๋ฌธ์ ๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ์ ๋งจ์์ dummy node๋ฅผ ์ถ๊ฐํ ํํ๋ก ์กฐ๊ธ ๋ณํ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์๋ค.
๋๋ฏธ ๋ ธ๋์ 0๋ฒ์ ๋ถ์ธ๋ค.

์กฐ๊ธ ๋ณํ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ

# LinkedList ํด๋์ค
class LinkedList:
# ์์ฑ์
def __init__(self):
self.nodeCount = 0
self.head = Node(None)
self.tail = None
self.head.next = self.tail
์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์์ฑ์๋ฅผ ๋ณ๊ฒฝ
๋ฆฌ์คํธ ์ํ
# ๋ฆฌ์คํธ ์ํ
def traverse(self):
result = []
curr = self.head
# ํ์ฌ ๋
ธ๋์ next๊ฐ ์กด์ฌํ๋ ๋์ ๋ฐ๋ณต
while curr.next:
result.append(curr.data)
curr = curr.next
return result
k๋ฒ์งธ ์์ ์ป์ด๋ด๊ธฐ
๋๋ฏธ ๋ ธ๋๋ฅผ ์ถ๊ฐํ์ผ๋ ์๋ฌ์ง์ ๊ณผ ์์์ ์ ๋ณ๊ฒฝํด์ฃผ์ด์ผํ๋ค. getAt(0) -> head
# ํน์ ์์ ์ฐธ์กฐ
def getAt(self, pos):
# ๋๋ฏธ๋
ธ๋๊ฐ ์ถ๊ฐ๋์์ผ๋ 0๋ฏธ๋ง์ด๊ฑฐ๋ ๋
ธ๋๊ฐ์๋ณด๋ค ๋ง์ผ๋ฉด ์๋ฌ (getAt(0) -> head)
if pos < 0 or pos > self.nodeCount:
return None
i = 0 # ๋๋ฏธ๋
ธ๋๊ฐ ์ถ๊ฐ๋์์ผ๋ 0๋ถํฐ ์์
curr = self.head # ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์ฒซ๋ฒ์งธ ๋
ธ๋๋ฅผ ๊ฐ๋ฅดํด
# i๊ฐ pos๋ณด๋ค ์์ ๋์์ i๋ฅผ ํ๋์ฉ ์ฆ๊ฐ์ํค๋ฉด์ curr๋ฅผ curr์ next๋ฅผ ๊ฐ๋ฅดํค๊ฒ ํ๋ค
while i < pos:
curr = curr.next
i += 1
return curr
์์์ ์ฝ์
def insertAfter(self, prev, newNode)
๋ ธ๋ prev๊ฐ ํ๋ ์ฃผ์ด์ง๊ณ ์ฝ์ ํ๋ ค๋ ๋ ธ๋ newNode๊ฐ ์ฃผ์ด์ง๋ค. prev๊ฐ ๊ฐ๋ฆฌํค๋ node์ ๋ค์์ newNode๋ฅผ ์ฝ์ ํ๊ณ ์ฑ๊ณต/์คํจ์ ๋ฐ๋ผ True/False๋ฅผ ๋ฆฌํดํ๋ค.
์์์ ์ฝ์ ํ๋ฆ





# ์์์ ์ฝ์
def insertAfter(self, prev, newNode):
newNode.next = prev.next
# ๋งจ ๋ค์ ์ฝ์
์ ํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด tail๋ ์กฐ์ ํด์ค์ผํจ
if prev.next is None:
self.tail = newNode
prev.next = newNode
self.nodeCount += 1
return True
๋ฉ์๋ insertAt()์ ๊ตฌํ
์ด๋ฏธ ๊ตฌํํ insertAfter()๋ฅผ ํธ์ถํ์ฌ ์ด์ฉํ๋ ๊ฒ์ผ๋ก
- pos ๋ฒ์ ์กฐ๊ฑด ํ์ธ
- pos == 1์ธ ๊ฒฝ์ฐ์๋ head ๋ค์ ์ node ์ฝ์
- pos == nodeCount + 1 (๋งจ ๋)์ธ ๊ฒฝ์ฐ์๋ prev <- tail
- ๊ทธ๋ ์ง ์์(๋งจ ๋์ด ์๋) ๊ฒฝ์ฐ์๋ ํ๋ํ๋ ์ฐพ์์ผํ๋ค. prev <- getAt(...)
# ์๋ก์ด ์์์ ์ฝ์
def newInsertAt(self, pos, newNode):
# ๋ฒ์ ์ ํจ์ฑ ํ์ธ
if pos < 1 or pos > self.nodeCount + 1:
return False
# pos ๊ฐ 1์ผ๋๋ ๋น ๊ณต๊ฐ์ ์ฝ์
ํ๋ ๊ฒฝ์ฐ๋๊น tail์ ๋ฃ์ด์ฃผ๋ฉด ์๋๋ค.
if pos != 1 and pos == self.nodeCount + 1:
prev = self.tail
else:
prev = self.getAt(pos-1)
return self.insertAfter(prev, newNode)
์์์ ์ญ์
def popAfter(self, prev):
prev์ ๋ค์ node๋ฅผ ์ญ์ ํ๊ณ ๊ทธ node์ data๋ฅผ ๋ฆฌํด
์์์ ์ญ์ ํ๋ฆ


์์์ ์ญ์ ์ฝ๋ ๊ตฌํ ์ฃผ์์ฌํญ
1. prev๊ฐ ๋ง์ง๋ง node ์ผ ๋ (prev.next == None)
- ์ญ์ ํ node์์
- return None
2. ๋ฆฌ์คํธ ๋งจ ๋ node๋ฅผ ์ญ์ ํ ๋ (curr.next == None)
- tail ์กฐ์ ํ์
popAfter() ๊ตฌํ
def popAfter(self, prev):
# prev๋ค์์ ๋
ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ ์ญ์ ํ ๋
ธ๋๊ฐ ์์ผ๋ None ๋ฆฌํด
if prev.next == None:
return None
# ์ญ์ ํ๋ ค๋ ๋
ธ๋๋ฅผ curr์ ๋ด๊ธฐ
curr = prev.next
# ์ญ์ ํ ๋
ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ
if curr.next == None:
# ์ ์ผํ ๋
ธ๋์ผ ๋
if self.nodeCount == 1:
self.tail = None
# ์ ์ผํ ๋
ธ๋๊ฐ ์๋ ๋
else:
self.tail = prev
# ๋งํฌ ์กฐ์
prev.next = curr.next
self.nodeCount -= 1
return curr.data
popAt() ๊ตฌํ
def newPopAt(self, pos):
if pos < 1 or pos > self.nodeCount:
raise IndexError
prev = self.getAt(pos-1)
return self.popAfter(prev)
๋ ๋ฆฌ์คํธ์ ์ฐ๊ฒฐ


# ๋ ๋ฆฌ์คํธ์ ์ฐ๊ฒฐ
def concat(self, L):
# ์๋ ๋ฆฌ์คํธ์ ๋งจ ๋์ด ์ด์ด๋ถ์ด๋ ค๋ ๋ฆฌ์คํธ์ ์ฒ์์ผ๋ก
self.tail.next = L.head.next
# ๋ฆฌ์คํธ L์ด ๋น์ด์์ ๊ฒฝ์ฐ
if L.tail:
self.tail = L.tail
self.nodeCount += L.nodeCount
'(๊ตฌ)์๋ฃ๊ตฌ์กฐ&์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ(Stacks) (1) | 2020.06.22 |
---|---|
์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Doubly Listed Lists) (0) | 2020.06.19 |
์ฐ๊ฒฐ ๋ฆฌ์คํธ (Linked List) (0) | 2020.06.18 |
์์ (0) | 2020.06.18 |
ํ์ด์ฌ ๋๋ ์ ์ ๋ ฅ๋ฐ๊ธฐ (0) | 2020.06.17 |
- Total
- Today
- Yesterday
- typeAliases
- Java
- ๊ฒ์ํ๋ง๋ค๊ธฐ
- Algorithm
- ๊ฒ์ํ ์กฐํ
- ๊ฐ๋ฐํ๊ฒฝ๊ตฌ์ถ
- ๋ถํธ ์๋์์ฑ
- ์ ์ฒด๊ฒ์๋ฌผ ์กฐํ
- ์จ๋ฆฌ์์ค
- ๋ณ๋ช ์ฒ๋ฆฌ
- ๊ฒ์ํ ์ญ์
- java jdk ์ค์น
- ์คํ๋ง๋ถํธ ์๋์์ฑ
- ์๋ฃ๊ตฌ์กฐ
- ๊ฐ๋ฐ
- ์๋ฐ
- ๊ฒ์๋ฌผ์กฐํ
- mysql์ค์น
- ์ดํด๋ฆฝ์ค ํ๊ธ ์ธ์ฝ๋ฉ
- ์๊ณ ๋ฆฌ์ฆ
- ์ดํด๋ฆฝ์ค ์ค์น
- java ํ๊ฒฝ๋ณ์
- ๊ฒ์๋ฌผ ์ญ์
- tomcat์ค์น
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |