๐ก ๋ ธ๋๋ ๊ฐ๊ณผ ํฌ์ธํฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
head = { 'value' : 11, 'next' : { 'value' : 3, 'next' : { 'value' : 23, 'next' : { 'value' : 7, 'next' : None } } } } print(my_linked_list.head.next.next.value) // 23
- ์์ ๋์ ๋๋ฆฌ ํ๊ณผ, ์ค์ Linked List ๊ตฌ๋ฌธ์ ๋ค๋ฅผ ์ ์์ง๋ง ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ค๋ฅธ ๊ณณ์ ์ ์ฅํ ๊ฒ์ด๋ผ๋ ์๊ฐ์ ์๋ก ๋น์ทํ๋ค.
- ์ค์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์๋ ๊ตฌํ ๋ฐฉ์์ด ๋ค๋ฅด์ง๋ง, ๊ธฐ๋ณธ์ ์ธ ์์ด๋์ด๋ ์ ์ฌํ๋ฏ๋ก Linked List๋ฅผ ์ค์ฒฉ๋ ๋์ ๋๋ฆฌ ์๋ฃํ์ผ๋ก ์๊ฐํด๋ ๋๋ค.
class LinkedList : def __init__(self, value) : # self ์ธ์๋ฅผ ํตํด, ํด๋์ค ์์ ํจ์๊ฐ ์๋๋ผ ๋ฉ์๋๊ฐ ์๋์ง ์ ์ ์๋ค. new_node = Node(value) self.head = new_node self.tail = new_node self.length = 1 def append(self, value) : pass def prepend(self, value) : pass def insert(self, value) : pass class Node : # ์์ LinkedList์ ๋ฉ์๋๋ค์ ๋ ธ๋๋ฅผ ๋ง๋ ๋ค ๋ผ๋ ๊ณตํต์ ์ด ์๊ณ , # ๊ทธ๋ฌ๋ฏ๋ก ๋๊ฐ์ ์์ ์ ํ๋ ์ฝ๋๋ฅผ ๋ค ๋ฒ ๋ง๋ค์ด ์์ฑํ์ง ์๋ ๋์ ํด๋น Node ํด๋์ค๋ฅผ ํธ์ถํด์ ์ฌ์ฉํ๋ค. def __init__(self, value) : # ํด๋น ์์ฑ์๋ฅผ ํตํด ๊ฐ์ ์ ๋ฌ ํ ํ ๋นํ ์ ์๋ค. self.value = value # ํน์ ์ธ์คํด์ค์ ์ ์ฉ๋๋ ๋ณ์๊ฐ ์์ ๋๋ self ํค์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. self.next = None
๐ก ๋งจ ๋ค์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฉ์๋
def append(self, value) : new_node = Node(value) // ๋ ธ๋๋ฅผ ์์ฑ if self.head is None : // Linked List๊ฐ ๋น์ด์์ ๊ฒฝ์ฐ self.head = new_node self.tail = new_node else : self.tail.next = new_node self.tail = new_node self.length += 1 return True # ์ด ๊ตฌ๋ฌธ์ ํ์์ ์ด์ง ์์ง๋ง, ๋ค๋ฅธ ๋ฉ์๋๋ค๊ณผ ๋น๊ต๋ฅผ ์ํด์ ์์ฑํ ๊ตฌ๋ฌธ
๐ก ๋งจ ๋ค์ ๋ ธ๋๋ฅผ ์ ๊ฑฐํ๋ ๋ฉ์๋
def pop(self) : if self.length == 0 : return None # ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ 0, ์ฆ ๋น์ด ์๋ค๋ฉด, ์ ๊ฑฐํ ๋ ธ๋๊ฐ ์์ผ๋ฏ๋ก None์ ๋ฐํํ๊ณ ํจ์๋ฅผ ์ข ๋ฃ. temp = self.head # temp๋ ํ์์ ์ํด ๋ค์ ๋ ธ๋๋ก ์ด๋ํ๋ ๋ฐ ์ฌ์ฉ pre = self.head # pre๋ temp ๋ฐ๋ก ์ด์ ๋ ธ๋๋ฅผ ์ถ์ ํ๋ ๋ฐ ์ฌ์ฉ # ๋ ๋ณ์ temp์ pre๋ฅผ ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ๋ ธ๋์ธ self.head๋ก ์ด๊ธฐํ while(temp.next) : # temp๊ฐ ๊ฐ๋ฆฌํค๋ ๋ ธ๋์ next๊ฐ None์ด ์๋ ๋๊น์ง, ์ฆ ๋ง์ง๋ง ๋ ธ๋์ ๋๋ฌํ ๋๊น์ง ๋ฐ๋ณต pre = temp # pre๋ฅผ temp๋ก ์ ๋ฐ์ดํธํด์ ํ์ฌ ๋ ธ๋๋ฅผ ์ถ์ temp = temp.next # ๊ทธ๋ฆฌ๊ณ temp๋ฅผ ๋ค์ ๋ ธ๋๋ก ์ด๋์ํด. ์ด ๋ฃจํ๋ฅผ ํตํด ๋ฆฌ์คํธ์ ๋๊น์ง ์ด๋ํ๊ฒ ๋จ. self.tail = pre # ๋ฃจํ๊ฐ ๋๋๋ฉด, temp๋ ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํด self.tail.next = None # pre๋ ๋ง์ง๋ง์์ ๋ ๋ฒ์งธ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํด # ์ด ์์ ์์ self.tail์ pre๋ก ์ ๋ฐ์ดํธํด์ ์๋ก์ด ๋ง์ง๋ง ๋ ธ๋๋ก ๋ง๋ค๊ณ , self.tail.next๋ฅผ None์ผ๋ก ์ค์ ํด ๋ง์ง๋ง ๋ ธ๋์์ ๋ช ์ self.length -= 1 if self.length == 0 : self.head = None self.tail = None # ๋ง์ฝ ๋ฆฌ์คํธ์ ๋ชจ๋ ๋ ธ๋๊ฐ ์ ๊ฑฐ๋์ด ๊ธธ์ด๊ฐ 0์ด ๋๋ฉด, self.head์ self.tail์ None์ผ๋ก ์ค์ ํด ๋ฆฌ์คํธ๊ฐ ๋น์ด ์์์ ํ์ return temp # ๋ง์ง๋ง์ผ๋ก ์ ๊ฑฐ๋ ๋ ธ๋์ธ temp๋ฅผ ๋ฐํ
๐ก ๋งจ ์์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฉ์๋
def prepend(self, value) : new_node = Node(value) if self.length == 0 : self.haed = new_node self.tail = new_node else : new_node.next = self.head self.head = new_node self.length += 1 return True
๐ก ๋งจ ์์ ๋ ธ๋๋ฅผ ์ ๊ฐํ๋ ๋ฉ์๋
def pop_first(self) : if self.length == 0 : return None temp = self.head self.head = self.head.next temp.next = None self.length -= 1 if self.length == 0 : # ์ด ์กฐ๊ฑด๋ฌธ์, ๋ ธ๋๊ฐ ํ๊ฐ๋ฟ์ผ ๊ฒฝ์ฐ์ ์ ์ฉ๋๋ค. self.tail = None return temp
def print_list(self) : temp = self.head while temp is not None : print(temp.value) temp = temp.next