2012-07-18 8 views
0

정수 및 링크를 입력으로 사용하고 Link in 위치 입력 정수 앞에 LinkedList에 링크를 삽입하는 메소드를 구현하려면 다음을 수행하십시오.insertBefore (int x, Link l) LinkedList Java

public void insertBefore(int num, String data) 
{ 
    Link current = head; 
    int count = 0; 
    while (current.next != null) 
    { 
     if(count == num) { 
     Link n = new Link(data); 
     n.next = current; 
     current.next = n.previous; 
     } 
    } 
    current = current.next; 
    count++; 

    } 

그러나이 방법을 사용하면 아무 것도 나타나지 않고 링크가 삽입되지 않으므로 아무 방법으로도 문제를 알 수 있습니까?

+3

음, 당신의 증가는 루프 밖에 있습니다. 사실이 코드는 목록에 머리가 없으면 루프를 무한대로 만듭니다 (비어 있고 머리가없는 경우 NPE를 내 보냅니다). –

답변

1

언급 한대로 반복 구조는 반복 메커니즘 외부에 있습니다. 또한 현재 링크의 다음 요소를 새 링크로 설정하는 것을 잊어 버리는 것입니다. 어떤 종류의 연결 목록을 사용하고 있는지 확실하지 않지만 개선점이 있습니다. 아래의 의견에 응답

if (count == num) { 
    Link n = new Link(data); 
    n.next = current; 
    current.previous.next = n; 
    n.previous = current.previous; 
    current.previous = n; 
} 

,보다 완벽한 개선이 당신의 코드를 기반으로 :

public void insertBefore(int num, String data) 
{ 
    Link current = head; 
    for (int count = 0; count < num && current.next != null; ++count) 
    { 
     current = current.next; 
    } 
    Link n = new Link(data); 
    n.next = current; 
    if (current.previous != null) 
     current.previous.next = n; 
    n.previous = current.previous; 
    current.previous = n; 
} 
+0

그래도 문제가 해결되지 않습니다. 'current'가 무엇인지를 변경하지 않았고'while' 조건은'current.next'를 기반으로합니다. 또한 조건으로 사용하면 목록에 머리가 포함되어 있으면 삽입 할 수 없다는 사실을 무시합니다. –

+0

맞습니다.하지만 이미 언급 했으므로 루프 구조에 손을 대고 싶지 않았습니다. 루프 조건에는 num에 대한 카운트 검사가 포함되어야하므로 루프 조건은 반복되는 코드에서만 목록을 수정하는 코드에 설정되지 않습니다. –

+0

충분히 공정한 - 나는 또한 '숙제'태그 –