链表变体

时间:2018-12-09 20:06:17

标签: c linked-list

我有点咸菜。我有一个链表的变体,其中不仅节点包含一个值,而且每个节点都会有一个标志来声明它是否为有效节点(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;
}

0 个答案:

没有答案