在不使用尾

时间:2017-09-08 16:53:46

标签: c data-structures linked-list tail

我创建了一个程序来反转一个单词的非元音序列,由一个简单的链表表示,但是我应该这样做而不使用指向最后一个节点的Tail指针。

我在createList中使用了此功能,pop(用于弹出列表并返回每个节点的字母char),push_backpush_front(都用于反转非 - 元素序列。例如,push_front将一个节点放在包含所分析序列的列表前面:node-> a-> b-> c。push_back,以相同的方式,使序列a-> b-> c为a-> b-> c->节点。

LIST *createList(void){
    LIST *list = malloc(sizeof(*list));
    if(list){
        list->first = list->tail = NULL;
    }
    return list;
}

char pop(LIST *list){
    char ch = list->first->letter;

    list->first = list->first->next;
    if(list->first == NULL)
        list->tail = NULL;
    return ch;
}

void push_back(LIST *list, char ch){
    NODE *node = createNode(ch);
    if(list->first)
        list->tail = list->tail->next = node;
    else
        list->tail = list->first = node;
}

void push_front(LIST *list, char ch){
    NODE *node = createNode(ch);
    if(list->first){
        node->next = list->first;
        list->first = node;
    } else {
        list->tail = list->first = node;
    }
}

我想知道如何用一些局部变量或上面函数的另一个实现来替换typedef中的尾指针。

1 个答案:

答案 0 :(得分:0)

你真的需要改变push_back,因为它推到了列表的末尾

model.df_lsh(df_lsh, df_lsh)

您可以在此处找到完整的实施https://repl.it/KiBB/6