數據結構與算法題目集(中文)6-5 鏈式表操作集

// 返回線性表中首次出現X的位置。若找不到則返回ERROR
Position Find( List L, ElementType X )
{
    List l;
    for (l=L;l!=NULL;l=l->Next)
    {
        if (l->Data==X)
            return l;
    }
    return ERROR;
}

// 將X插入在位置P指向的結點之前,返回鏈表的表頭。如果參數P指向非法位置,則打印“Wrong Position for Insertion”,返回ERROR
List Insert( List L, ElementType X, Position P )
{
    List l,NewNode;
    if (L==P)
    {
    	NewNode=(List)malloc(sizeof(struct LNode));
        NewNode->Next=P;
        NewNode->Data=X;
        return NewNode;	
	}
    for (l=L;l!=NULL;l=l->Next)
    {
        if (l->Next==P)
            break;
    }
    if (l==NULL) 
    {
        printf("Wrong Position for Insertion\n");
        return ERROR;
    }
    P=(List)malloc(sizeof(struct LNode));
    P->Next=l->Next;
    l->Next=P;
    P->Data=X;
    return L;
}

// 將位置P的元素刪除並返回鏈表的表頭。若參數P指向非法位置,則打印“Wrong Position for Deletion”並返回ERROR
List Delete( List L, Position P )
{
    List l;
    if (L==P)
    {
    	l=L->Next;
    	free(L);
    	return l;
	}
    for (l=L;l!=NULL;l=l->Next)
    {
        if (l->Next==P)
            break;
    }
    if (l==NULL) 
    {
        printf("Wrong Position for Deletion\n");
        return ERROR;
    }
    l->Next=P->Next;
    free(P);
    return L;
}
  • 錯誤原因:
  1. Insert函數沒有考慮到P==L,即在表頭插入的情況
  2. Insert函數沒有考慮到P==NULL,即在表尾插入的情況
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章