Вариант связанного списка - PullRequest
0 голосов
/ 09 декабря 2018

Я немного рассол.У меня есть вариант связанного списка, где не только узлы содержат значение, но также у каждого узла будет флаг, указывающий, является ли он действительным узлом или нет (1 действителен; 0 недействителен).У меня есть некоторые функции, с которыми я сталкиваюсь с трудностями.У меня есть deleteLast, который удаляет последний действительный узел, или, другими словами, очищает допустимый флаг в 0. Имейте в виду, что последний действительный узел может быть не последним узлом;Я надеялся, что тут будут полезны countNodes.deleteValue 'удаляет' первый действительный узел с указанным значением.restoreValue восстанавливает первый «удаленный» узел с указанным значением.наконец, compact создает новый список допустимых узлов только в обратном порядке старого списка.deleteLast - это функция, с которой у меня больше всего проблем.Любая обратная связь по этой функции или любой другой функции будет очень полезна.Вот некоторый код:

#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>

struct Node{
    struct Node *link;
    int value;
    int valid;
}

int countNodes (Node *ptrToFirst){
    int count=0;
    if(ptrToFirst==NULL){
        return 0;
}
else{
    while(ptrToFirst!=NULL){
        if(ptrToFirst->valid==1)
            count++;
            ptrToFirst=ptrToFirst->link;
    }
}
int deleteLast(Node *ptrToFirst){
    Node p;
    if(countNodes||ptrToFirst!=NULL){
        while(ptrToFirst!=NULL){
            ptrToFirst->link;
            if(ptrToFirst->valid==1)
            if(ptrToFirst->link==NULL){
        }
    }
}
else return 0;
}
int deleteValue(Node *ptrToFirst, int val){
    if(ptrToFirst==NULL){
        return 0;
}
    while(ptrToFirst!=NULL){
        if(ptrToFirst->value==val&&ptrToFirst->valid==1){
            ptrToFirst->valid=0;
            return 0;
        }
        else
            ptrToFirst=ptrToFirst->link;
    }
}
int restoreValue(Node *start, int val){
    if(start==NULL){
        return 0;
}
    while(start!=NULL){
        if(start->value==val&&start->valid==0)
            start->valid=1;
            return 1;
        else
            start=start->link;
    }
}
int compact(Node *old, **ptrToNewHeadPtr){
    Node temp;
    if(old!=NULL){
        while(old!=NULL){
            if(old->valid==1)
                temp=old;
                *ptrToNewHeadPtr=temp;
                 old=old->link;
        }
    return 1;
    }
else return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...