2013-07-10 2 views
0

세 가지를 어떻게해야되는 함수입니다 :값이 N 인 모든 노드를 삭제 한 후 링크 된 목록의 앞을 가리 킵니까? 다음

1.Delete 연결리스트에서 값 N (char key)의 모든 노드 (값은 항상 하나의 문자 문자입니다.)

2. 링크리스트의 선두를 돌려줍니다.

3. 모든 것은 반복적으로 수행되어야합니다.

node* deleteN(node* head, char key) 
    { 
     node* prev; 
     node* cur; 

     if (head == NULL) 
      return NULL; 

     prev = head; 
     cur = head->next; 

     if (head->data == key && head->next != NULL) 
     { 
      node* temp = head; 

      head = temp->next; 

      free(temp); 
     } 

     if (cur->data == key && cur->next == NULL) 
     { 
      free(cur); 

      prev->next = NULL; 
     } 

     head->next = deleteN(head->next, key); 

     return head; 

    } 

내 문제는 내가 잘 노드를 삭제하고 노드가리스트의 마지막 노드 인 경우 당신은 내가 특별한 경우를 볼 수 있습니다입니다. 그러나 머리를 되 돌리면 머리가 아무 것도 가리키지 않아 링크 된 목록으로 다른 일을하려고 할 때 충돌이 발생합니다.

내 질문은 : 값 N의 모든 노드를 삭제 한 후 함수의 끝에서 링크 된 목록 (시작한 곳)의 맨 앞에 머리를 갖다 대고이 포인터를 반환 할 수 있습니까?

+0

는 각각의 삽입/삭제 작업에/업데이트를 저장 보관하십시오. –

답변

0

는 단순히 재귀에서 목록을 재 구축

node* deleteN(node* head, char key) 
{ 
    if (head == NULL) 
    return NULL; 

    node* tail = deleteN(head->next, key); 
    if (head->data == key) { 
    free(head); 
    return tail; 
    } else { 
    head->next = tail; 
    return head; 
    } 
} 
관련 문제