파이썬에서 연결된 리스트에서 merge()연산 하는법
조회수 655회
아래의 코드의 연결된 리스트에서 a.merge(b)라면 a의 맨 뒤에 b를 추가하고 b의 길이는 0으로 하라는 문제인데. 3시간을 생각해도... 이게 다입니다. 도와주십사 하고
class Node:
def __init__ (self, elem, link=None):
self.data = elem
self.link = link
class LinkedList:
def __init__( self ):
self.head = None
def isEmpty( self ): return self.head == None
def clear( self ) : self.head = None
def size( self ):
node = self.head
count = 0
while not node == None :
node = node.link
count += 1
return count
def display( self, msg='LinkedList:'):
print(msg, end='')
node = self.head
while not node == None :
print(node.data, end=' ')
node = node.link
print()
def getNode(self, pos) :
if pos < 0 : return None
node = self.head;
while pos > 0 and node != None :
node = node.link
pos -= 1
return node
def getEntry(self, pos) :
node = self.getNode(pos)
if node == None : return None
else : return node.data
def replace(self, pos, elem) :
node = self.getNode(pos)
if node != None: node.data = elem
def find(self, data) :
node = self.head;
while node is not None:
if node.data == data : return node
node = node.link
return node
def insert(self, pos, elem) :
before = self.getNode(pos-1)
if before == None :
self.head = Node(elem, self.head)
else :
node = Node(elem, before.link)
before.link = node
def delete(self, pos) :
before = self.getNode(pos-1)
if before == None :
if self.head is not None :
self.head = self.head.link
elif before.link != None :
before.link = before.link.link
def merge(self, list2):
new = Node(list2, self.head)
target = self.head
while target.link != None:
target = target.link
newtail = new
target.link = newtail
class LinkedList2:
def __init__( self ):
self.head = None
def isEmpty( self ): return self.head == None
def clear( self ) : self.head = None
def size( self ):
node = self.head
count = 0
while not node == None :
node = node.link
count += 1
return count
def display( self, msg='LinkedList:'):
print(msg, end='')
node = self.head
while not node == None :
print(node.data, end=' ')
node = node.link
print()
def getNode(self, pos) :
if pos < 0 : return None
node = self.head;
while pos > 0 and node != None :
node = node.link
pos -= 1
return node
def getEntry(self, pos) :
node = self.getNode(pos)
if node == None : return None
else : return node.data
def replace(self, pos, elem) :
node = self.getNode(pos)
if node != None: node.data = elem
def find(self, data) :
node = self.head;
while node is not None:
if node.data == data : return node
node = node.link
return node
def insert(self, pos, elem) :
before = self.getNode(pos-1)
if before == None :
self.head = Node(elem, self.head)
else :
node = Node(elem, before.link)
before.link = node
def delete(self, pos) :
before = self.getNode(pos-1)
if before == None :
if self.head is not None :
self.head = self.head.link
elif before.link != None :
before.link = before.link.link
def merge(self, list2):
temp = self.head
while temp.link:
temp = temp.link
temp.link = Node(list2, None)
s = LinkedList()
a = LinkedList2()
s.insert(0, 10)
s.insert(0, 20)
s.insert(2, 40)
a.insert(0, 100)
a.insert(0, 200)
a.insert(2, 400)
s.merge(a)
s.display()
댓글 입력