2013-02-14 2 views
0

링크 된 목록에서 삭제하려고합니다. 하지만 그것은 첫 번째 요소를 삭제하려고하면 작동하지 않는 것 같습니다. 내가 중간에 또는 꼬리에서 어딘가에서 삭제한다면 링크 된 목록에서 데이터 삭제

if (found) 
{ 
    if (prev == NULL) 
    { 
     prev = head; 
     prev -> next = curr -> next; 
     delete curr; 
    } 
    else 
    { 
     prev -> next = curr -> next; 
     delete curr; 
    } 
} 

return found; 

findNode 기능

작동합니다. 하지만 나는 꼬리에서 삭제하면 NULL 옆에 설정해야한다고 알았지?

+0

당신이'findNode' 기능을 보여줄 수 있어야한다? 가장 중요한 것은'prev'와'curr' 인자를 전달 (그리고 설정)하는 방법입니다. –

+0

당신은 헤더 노드를 가지고 있는데 왜 첫 번째 노드를 성공적으로 검색 한 후에 해당 헤더 노드를 'prev'하지 않습니다. –

+0

내 코드를 편집했습니다. – win

답변

1

은 실제로 head이 새 머리글을 가리 키도록 변경하지 않는다는 것을 나타냅니다.

if (prev == NULL) 
{ 
    head = head->next; // Set `head` to point to the next node, i.e. the new `head` 
    delete curr; 
} 
+0

내가 멍청한 실수를 저질렀다. 도움 녀 들께 감사드립니다! 해결되었습니다. 나는 prev = head를 바 꾸었습니다. 이전 -> 다음 = curr -> 다음; to head = curr -> 다음; – win

0

findNode 다음

if (prev == NULL) 
    { 
     prev = head; 
     prev -> next = curr -> next; 
     delete curr; 
    } 

가 잘못 (이중 연결리스트를 고려할 수 있습니다) 정확하고 curr 전에 노드에 prev을 설정한다고 가정 : 당신은 head을 변경해야합니다. prev이 NULL 일 때 발견 된 헤드 노드입니다.

그래서 코드는

if (prev == NULL) 
    { 
     head = head->next; 
     delete curr; 
    } 
관련 문제