2017-05-03 1 views
0

내 코드에 문제가 있습니다. 노드를 삭제 한 후 동일한 노드가 다음 노드의 이전 노드로 나타납니다. 노드 4를 제거하려고합니다.순환 연결 목록에서 값 삭제

이전 : 노드 : 5; 노드 : 15; NextNode : 16 | 이전 : 노드 : 15; 노드 : 16; NextNode : 29 | 이전 : 노드 : 16; 노드 : 29; NextNode : 4 | 이전 : 노드 : 29; 노드 : 4; NextNode : 5 | 이전 : 노드 : 4; 노드 : 5; NextNode : 15 |

제거 후

이전 : 노드 : 5; 노드 : 15; NextNode : 16 | 이전 : 노드 : 15; 노드 : 16; NextNode : 29 | 이전 : 노드 : 16; 노드 : 29; NextNode : 5 | 이전 : 노드 : 4; 노드 : 5; NextNode : 15

public Node deleteValue(int i) { 
    Node node = start; 
    do { 
     if (node.next.getData() == i) { 
      Node n = node.next; 
      node.next = n.next; 

      size--; 

      if (n == start) { 
       start = node; 

      } 
      return n; 
     }][1] 

     node = node.next; 
    } while(node != start); 
    return null; 
} 
+0

Node 클래스에 이전 노드를 가리키는 필드/변수가 있습니까? 아니면 다음 요소를 가리키는 다음 필드 만 있습니까? –

+0

예 노드가 있습니다. prev; – gate

+0

글쎄, 당신은 아마도 당신의 remove 메쏘드에서 그것을 수정할 것입니다. 현재 다음 속성 만 변경 중입니다. 따라서 prev 속성이 동일하게 유지되고 여전히 제거 된 요소를 가리키는 것은 놀랄 일이 아닙니다. –

답변

0

항목을 삭제하면 간단한 코드 행이 누락됩니다. 이전 요소의 next 요소와 next-next 요소의 이전 요소를 설정해야합니다. 실제로 두 번째 부분이 누락되었습니다. 코드는 다음과 같습니다.

Node current = start; 
do{ 
    if(current.getData() == i){ 
    // set the previous's next element 
    current.previous.next = current.next; 
    // set the next element's previous element 
    current.next.previous = current.previous; 
    this.size--; 
    return current; 
    } 
    current = current.next; 
}while(node != start); 
return null; 
+0

대단히 감사합니다 :) :) – gate