단일 체인 테이블 의 i 번 째 노드 삭제

단일 체인 테이블 의 삭제 작업 은 단일 체인 테이블 의 i 번 째 노드 를 삭제 하 는 것 이다.구체 적 인 절 차 는 다음 과 같다. (1) 노드 ai - 1 의 저장 위치 p 를 찾 습 니 다. 단일 체인 표 에서 노드 ai 의 저장 주 소 는 직접 앞으로 노드 ai - 1 의 지침 도 메 인 next 에 있 기 때 문 입 니 다.(2) 령 p - > next 는 ai 의 직접 후계 노드 ai + 1 을 가리킨다.(3) 노드 ai 의 공간 을 방출 한다.
#include 
#include 

typedef struct node
{
    int data;
    struct node *next;
} NODE;


//         (    )
NODE *createEnd(int arr[], int len)
{
    NODE *head = (NODE *)malloc(sizeof(NODE)); //      
    head->next = NULL;
    NODE *end = head;  //       

    for (int i = 0; i < len; i++) {

        NODE *p = (NODE *)malloc(sizeof(NODE)); //              
        p->data = arr[i];
        end->next = p;  //    p         
        end = p;
    }

    end->next = NULL;  //return head;
}


//        i   
NODE *delete(NODE *head, int i)
{
    NODE *p = head;

    int j = 1;
    while (p->next && j < i) {
        p = p->next;
        ++j;
    }

    if (p->next == NULL || j > i) { //     ,   p  , i 0    ,        ;
        printf("Position Error
"
); return 0; } NODE *temp = p->next; p->next = temp->next; free(p); return head; } // : (1) n, i , 1<= i <= n, ; // (2) i=n+1 , , , ; , *p , , *p ( p != NULL) *p ( p->next != NULL) j <= i , 。 , O(n)。 // void print(NODE *head) { if (head == NULL) return; NODE *p = head->next; while (p != NULL) { printf("%d
"
, p->data); p = p->next; } } int main(void) { int arr[] = {1,2,3,4,5,6,7}; int len = sizeof(arr)/sizeof(int); NODE *head = createEnd(arr, len); // print(head); delete(head, 5); // print(head); return 0; }

좋은 웹페이지 즐겨찾기