파이썬에서 연결된 리스트에서 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()
  • 혹시 deque나 list등 파이썬의 기본 리이브러리를 사용하면 안되는건가요? Eveheeero 2022.5.9 02:29
  • 놀리는 것 같겠지만... 3시간 생각해서 그정도면, 4시간 생각해요. 왜이렇게 성격들이 급해. nowp 2022.5.9 09:37

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)