그래서 처음부터 링크 된 목록을 구현했으며 현재 노드 (커서)를 제거하려고합니다. 프로그램을 실행하고 현재 노드를 제거하려고하면 오류가 발생하지 않지만 현재 노드 (다음 노드 나 이전 노드 여야 함)를 인쇄하려고 시도하고 ' 제거되었습니다.자바 - 수동 연결 목록, 현재 노드 제거
답변
나는,
cursor = cursor.getPrev().getNext();
에 전화 아무것도하지 않는 (가정 커서가 삭제할 목록의 요소가) 의심스러운 해요 이미 cursor
해야 == cursor.getPrev().getNext()
는
cursor.getPrev().setNext(cursor.getNext()); // note SET instead of GET
cursor.getNext().setPrev(cursor.getPrev());
전나무입니다 이 부분에서
// get previous node and set its next to node after cursor
cursor.getPrev().setNext(cursor.getNext());
: 당신은 아마 커서를 가리키는에서 이전 노드의 연결을 해제하고 커서 후 노드를 가리 만들고 싶었다
// ...
}else{
cursor = cursor.getPrev().getNext(); // THIS LINE - all you say here is 'cursor = cursor'
cursor = cursor.getNext();
}
// ...
: 모든 t,이 라인은 이해되지 않는다
if(cursor.getNext() == null){ //it's the tail
tail = cursor.getPrev();
}
당신은 내가를 업데이트 한 후 그래서 당신의 tail.next
이 cursor
를 가리 킵니다 tail.next = null
을 말함으로써 tail.next
을 분리하지 티.
// get next node and set its prev to node before cursor
cursor.getNext().setPrev(cursor.getPrev());
전반적으로, 당신의 논리는 그것이 있어야 다음 복잡하게 더 많은 것 같다 같은
else{
cursor = cursor.getNext().getPrev(); // again no effect
cursor = cursor.getPrev();
}
이 보일 것입니다. 코드를 단순화하지만 논리를 변경하지 않는 한 가지 방법은 다음과 같습니다 (커서 노드 사용)
if
문을 약간 재정렬하면 더 명확 해집니다. 커서가 중간 노드에있는 때 ambigous 상황이 있기 때문에 내가 커서의 업데이트를 남겨
if (cursor != null){
if(cursor.getPrev() == null){ //it's the head
head = cursor.getNext();
head.setPrev(null); // disconnect the head from current node
} else if (cursor.getNext() == null) { // it's the tail
tail = cursor.getPrev();
tail.setNext(null); // disconnect the tail from current node
} else { // regular node
Node prev = cursor.getPrev();
prev.setNext(next); // connect previous node to next node
Node next = cursor.getNext();
next.setPrev(prev); // connect next node to previous node
}
// this part isn't necessary because we are skipping the cursor node
// so nothing in the list references to it anymore
// however it is a good safety measure and it helps the GC a bit
cursor.setPrev(null); // disconnect cursor from previous node
cursor.setNext(null; // disconnect cursor from next node
}
당신은 그것을 제거 : 그런 다음 나머지 가장자리의 경우 첫 번째 (머리와 꼬리)를 확인해야합니다. 문제는 커서를 prev
또는 next
으로 어떻게 업데이트하겠습니까?
커서가 실제로 필요하지 않지만 이미이 대답이 많이 정체되어 있으므로 this link
과 this link
을 사용하여 좋은 아이디어를 확인해 보겠습니다.
지금까지 당신의 긴 인쇄 포맷으로 : 당신이, 당신은 자동으로
AH 제 세터 메소드들입니다. 고맙습니다! 링크를 주셔서 감사합니다. –
@ user3076352 문제 없음 :) – nem035
- 1. 자바 구현의 이중 연결 목록
- 2. 이중 연결 목록 작성 노드
- 3. 셀레늄 그리드 연결 노드 목록
- 4. 자바 (초급)의 목록 노드
- 5. 연결된 목록 수동 정렬
- 6. 수동 Drupal 노드 삽입
- 7. 링크 된 목록 (스택)에서 노드 제거
- 8. Drupal : 노드 목록 페이지를 제거/리디렉션하는 방법
- 9. 수동 연결 시도
- 10. 수동 FTP 연결
- 11. 이중 연결 목록 중간에 노드 삽입
- 12. 단일 연결 목록 중간에 노드 삭제
- 13. 이중 연결 목록 노드 스와핑 문제
- 14. 단일 연결 목록 중간에 노드 추가
- 15. 이중 연결 목록 - 제거 및 추가
- 16. witihn에서 링크 제거 현재 메뉴 목록 항목
- 17. C# 목록 상자에서 현재 항목 제거
- 18. 자바 삭제 노드 연결 목록이 작동하지 않습니다.
- 19. 노드 제거
- 20. 파스칼에서 간단한 연결 목록 노드에서 제거
- 21. C++ 이중 연결 목록 검색 및 제거
- 22. MAMP PRO에서 호스트 수동 제거
- 23. 포인터 연결 목록
- 24. 노드 복제 및 제거
- 25. 노드 제거 및 재설치
- 26. 퀴즈 제거 노드
- 27. 자바 스크립트 구성 요소 참조 노드 목록
- 28. 노드 목록 내가 좋아하는 노드 목록 추출한
- 29. C++ - AVL 트리에서 노드 제거
- 30. 글로벌 연결 목록에 노드 추가
여기에 인스턴스 변수 커서가 코드를 :) 형식을 Mac에서 Windows에서
Ctrl-Shift-F
또는Cmd-Shift-F
를 사용할 수있는 Eclipse를 사용하는 경우를? 문제를 일으키는 것은 여러 번 지정하고 있습니다. – mkobit
현재 노드를 삭제 한 후'cursor'는 어느 노드를 가리 킵니까? 이전 노드 또는 다음 노드? 당신은이 행동을 정의해야만합니다. –