2016-07-26 2 views
0

추가, 제거 및 삽입 방법을 사용하여 단일 연결 목록을 작성하려고합니다. 삽입 방법과 혼동 스럽다.파이썬에서 단일 링크 목록 추가, 제거, 삽입

class Node(object): 

def __init__(self, data, next): 
    self.data = data 
    self.next = next 

class SingleList(object): 

head = None 
tail = None 

def printList(self): 
    print "Link List:" 
    current_node = self.head 
    while current_node is not None: 
     print current_node.data, " --> ", 
     current_node = current_node.next 
    print None 

def add(self, data): 
    node = Node(data, None) 
    if self.head is None: 
     self.head = self.tail = node 
    else: 
     self.tail.next = node 
    self.tail = node 

def insert(self, before, nextdata): 
    #nextdata is to be inserted before 'before' 
    #before is actually a data 
    #but it has dif name in this def to avoid confusion with 'data' 
    current_node = self.head 
    previous_node = None 
    while current_node is not None: 
     if current_node.data == before: 
      if previous_node is not None: 
       current_node.next = current_node 
     previous_node = current_node 
     current_node = current_node.next 

def remove(self, node_value): 
    current_node = self.head 
    previous_node = None 
    while current_node is not None: 
     if current_node.data == node_value: 
      # if this is the first node (head) 
      if previous_node is not None: 
       previous_node.next = current_node.next 
      else: 
       self.head = current_node.next 
     # needed for the next iteration 
     previous_node = current_node 
     current_node = current_node.next 

링크 목록 :

1 --> 2 --> 3 --> 4 --> 5 --> None 

링크 목록 :

예를 들어
3 --> 4 --> 6 --> 10 --> None 

내가 4

전에 숫자 9를 삽입 삽입 (4,9)을 할 노력하고있어 경우
s = SingleList() 
s.add(1) 
s.add(2) 
s.add(3) 
s.add(4) 
s.add(5) 
s.printList() 
s.add(6) 
s.add(10) 
s.remove(5) 
s.remove(2) 
s.remove(1) 
s.printList() 
s.insert(4,9) 
s.printList() 

도움이됩니다. 스 니펫, 조언 anythin 숟가락 먹이지 말아라. 감사! 이 알아서 할 것이다

def insert(self, before, nextdata): 
    #nextdata is to be inserted before 'before' 
    #before is actually a data 
    #but it has dif name in this def to avoid confusion with 'data' 
    current_node = self.head 
    previous_node = None 
    while current_node is not None: 
     if current_node.data == before: 
      if previous_node is not None: 
       temp_node = current_node 
       current_node = Node(nextdata, temp_node) 
       previous_node.next = current_node 
      else: 
       new_node = Node(nextdata, current_node) 
       self.head = new_node 
      break 
     previous_node = current_node 
     current_node = current_node.next 

:

+0

삽입 방법은 목록에있는 다른 번호가 나타날 때마다 그 번호를 삽입합니다. 너는 그걸 원하지 않는다고 생각 하나? –

+0

'current_node.next = current_node' 이제 노드는 자신을 가리 킵니다. – stark

+0

그 방법에서'nextdata'를 어디에서 사용하고 있습니까? –

답변

0

당신은 귀하의 삽입을 다시 작성해야합니다. 새 노드를 삽입하면 루프를 중단해야합니다. 그렇지 않으면 무한대가됩니다.

+0

'current_node.data == before :' 데이터를 사용하는 대신 노드가 될 수 있습니까? –

+0

고마워요.하지만 데이터를 사용하지 않고 노드를 삽입하는 방법이 있습니까? –