2013-06-09 3 views
-1

"알고리즘 제 4 판"의 연습 문제 1.3.26을하고 있습니다. 연결리스트
* 및 인수로 문자열 키를 받아서 키 등이 목록에있는 노드
*을 모두 제거링크드 목록 연습을 개선하는 방법은 무엇입니까?

/** * 1.3.26 쓰기 방법 삭제() 해당 항목 필드.
*
* 자바 LinkListRemove에
* 될하거나 제거하기 전에 *
*^Z/^ D
다이 할로 이동하기 :
*가되도록하거나 행까지로 이동하도록 제거의 결과 *
다이 :
*이거나 죽을 갈
* 크기 : 4

* */

내 구현은 여기 LinkListRemove이며 작동합니다. 그러나 나는 그것이 우아하지 않다고 느낍니다. 단일 연결 목록의 순회를 한 번만 사용할 수 있습니까?

생각의 나의 기차는 2 단계 프로세스입니다

  1. 은 처음부터 연속 키를 제거 처리 후 linklist는 키가 아닌 노드에서 시작 또는 비어 있습니다.
  2. 첫 번째 노드 다음에 일치하는 노드를 제거하면 링크 목록이 비 키 노드로 시작하거나 비어 있습니다.

실행하려면 이 필요합니다.

+1

당신은 전혀 문제가 없습니다 그것에 노력보다는 –

+0

를 요청하여이를 개선 할 수 있습니다. 목록을 정확히 한 번 트래버스합니다. –

답변

0

나는 당신의 질문에서 알다시피, 당신은 주어진 키와 일치하는 목록에서 모든 요소를 ​​제거하고자합니다.

예,이 작업은 목록을 한 번 반복 할 때 수행 할 수 있습니다. 단계가 도움이 아래 :

Node temp =null; 
if(key != null && first != null){ 
    if(key.equals(first.item)){    
     temp = first; 
     first = first.next; 
     temp.link=null; 
     temp =null; 
     return; 
    } 
    else{ 
     Node tempIt = first.link; 
     temp = first; 
     while(tempIt != null) 
      { 
       if(key.equals(tempIt.item)){ 
        temp.link = tempLt.link; 
        tempLt.link = null; 
        tempLt = null; 
       } 
       temp = tempLt; 
       tempLt= tempLt.next; 
      } 
     } 
} 
return;