2014-02-23 6 views
0

목록에서 k 요소를 삭제하고 싶습니다. 아래처럼 (의사 코드)단일 링크 목록, k 요소 삭제

delete(L,k) 

x <- L.head 
i <- 1 
while(i < k-1 AND x.next != NULL) 
    x<-x.next 
    i <- i+1 
if(i = k-1 AND x.next != NULL) 
    if(x.next.next != NULL) 
     x.next <- x.next.next 
    else if(x.next.next = NULL) 
     x.next = NULL 

내 목적은 k가 마지막 인 경우 k-1.next를 삭제하는 것입니다. k가 마지막이 아니면, k-1을 가리키고 k + 1을 가리킨다. 좋은 생각이야?

답변

2

링크드 목록 삭제 방법이 거의 올바른 것처럼 보입니다.

왜 1부터 세 시나요? 당신이 머리가 값을 포함하지 않는 더미 노드되고 싶어 그렇게하려고하면 (다음 빈 목록을 유지할 수 있습니다) :

i=0 
while(i <= k && x.next != null) 

을 그럼 당신은 첫 번째 항목을 삭제하고자 할 때 (K = 1) while 루프는 한 번 실행됩니다. 그렇지 않으면 k에 첫 번째 if 문 변화 k-1에 유사

while(i = k && x.next !=null) 

를 사용합니다.

IF ELSE를 사용하는 이유는 모르겠다. 왜냐하면 x.next.next가 널 (null)이면 어쨌든 null을 할당하기 때문이다.

문제는 카운터 값과 삭제 값에 있습니다. 목록의 첫 번째 항목을 삭제하십시오.

+0

감사합니다. L. 헤드가 비어 있어야한다는 뜻입니까? – user3162968

+0

그리고 다음 일 : if = k까지 루프가 계속 된 다음 k.next를 삭제하면 k + 1 요소가 삭제됩니다. – user3162968

+1

빈 링크드 목록 (머리 만 포함하는 목록)을 만드는 한 가지 방법으로 L.head를 항상 비어있게 만들 수 있습니다. 그렇지 않으면 목록에서 유일한 항목을 삭제할 때 목록이 없습니다. 당신은 필요가 없습니다. – user2590835