как убрать дубликаты кода в этом коде? - PullRequest
0 голосов
/ 12 апреля 2020

Я новый программист на C99 и хочу помочь сообществу в этом.

Я написал следующую функцию, которая получает два указателя для узла (или просто узла) и указатель на указатель на узел (или * узел) объединяет их в один отсортированный узел.

Это дано:

typedef struct node_t {
    int x;
    struct node_t *next;
} *Node;

typedef enum {
    SUCCESS = 0,MEMORY_ERROR, EMPTY_LIST, UNSORTED_LIST, NULL_ARGUMENT,
} ErrorCode;

int getListLength(Node list);

bool isListSorted(Node list);

Это код, который я написал:

ErrorCode mergeSortedLists(Node list1, Node list2, Node *merged_out)
{
    if (merged_out==NULL)
        return NULL_ARGUMENT;
    if (list1==NULL || list2==NULL)
        return EMPTY_LIST;
    if (!isListSorted(list1) || !isListSorted(list2))
        return UNSORTED_LIST;
    Node ptr=*merged_out;
    int list1_len=getListLength(list1),list2_len=getListLength(list2);
    for (int i=0;i<list1_len+list2_len;i++)
    {
        int min=0;
        if (list1!=NULL && (list2==NULL || (list2!=NULL && list1->x<=list2->x))){
            min = list1->x;
            list1=list1->next;
        }
        else{
            min=list2->x;
            list2=list2->next;
        }
        ptr->x=min;
        if (i==list1_len+list2_len-1){
            ptr->next=NULL;//The next for the last Node should be Null
            continue;
        }
        ptr->next=malloc(sizeof(*ptr));
        if (ptr->next==NULL){
            //We should Free all previosly allocated memory
            //except for the first node since it was not allocated via malloc
            return MEMORY_ERROR;
        }
        ptr=ptr->next;
    }
    ptr=NULL;
    return SUCCESS;
}

Но после просмотра моего кода мне сказали, что в нем много дубликатов кода (точнее, внутри него для l oop), которые должны быть исправлены с помощью внешних функций, обратите внимание какие-либо дубликаты кода? и как это исправить, есть идеи?

...