편집 기록

편집 기록
  • 프로필 Eveheeero님의 편집
    날짜2022.05.09

    파이썬에서 연결된 리스트에서 merge()연산 하는법


    아래의 코드의 연결된 리스트에서 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()
    
  • 프로필 김병모님의 편집
    날짜2022.05.08

    파이썬에서 연결된 리스트에서 merge()연산 하는법


    아래의 코드의 연결된 리스트에서 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()