Алгоритм для удаления одного элемента в единственном связанном списке с O (1) сложность

вместо указания paddingLeft: 25 стиля вашего текстового компонента, оставьте поле Left для родительского компонента View следующим образом:

    underlineTextContainer: {
        borderBottomWidth: 2,
        borderColor: '#ffffff',
        marginLeft: 25,
}

imgText: {
        fontFamily: Fonts.SourceSansProBold,
        fontSize: 16,
        fontWeight: "bold",
        fontStyle: "normal",
        lineHeight: 16,
        letterSpacing: 0,
        color: "#ffffff", 
        paddingBottom: 5,
        textAlign: 'center'
    }
8
задан code4life 27 September 2012 в 17:16
поделиться

6 ответов

Это зависит от того, являются ли узлы изменяемыми (по значению).

Там есть способ сделать это, если вы можете делать то, что вам нравится с узлы:

toDelete.value = toDelete.next.value
toDelete.next = toDelete.next.next

Вся информация из toDelete теперь перезаписана информацией из старого toDelete.next . (В зависимости от платформы вам может потребоваться освободить старый toDelete.next - что означает сохранение временной ссылки на него. Не хорошо, если у кого-то еще есть ссылка на него, конечно. В Java / C # вы бы просто проигнорировали это.)

Я пытался выработать способ намека на это, не отдавая его, но это довольно сложно ...

Он полагается, что это не последний узел в хотя список.

24
ответ дан 5 December 2019 в 04:46
поделиться

Не совсем считается удаление узла, но вы можете скопировать данные следующего узла в текущий и удалить следующий узел:

// pseudocode:
this.data = next.data;
var temp = this.next;
this.next = next.next;
delete temp;
8
ответ дан 5 December 2019 в 04:46
поделиться

Если узлы являются базовыми структурами в памяти, вы можете скопировать содержимое «следующего» узел в ячейку памяти удаленного узла и освобождает память, где был «следующий» узел.

3
ответ дан 5 December 2019 в 04:46
поделиться

Да. Вы сохраняете в качестве итеративного указателя указатель на следующий указатель предыдущего списка.

walk = &head;
while (!match(*walk)) {
    walk = &walk[0]->next;
    if (!*walk) return ;
}
*walk = walk[0]->next;
2
ответ дан 5 December 2019 в 04:46
поделиться

Предполагая, что у вас есть указатель на узел, который вы хотите удалить. Скопируйте следующее значение в текущий узел. Заменить текущий указатель на узел, на который указывает следующий.

2
ответ дан 5 December 2019 в 04:46
поделиться
2
ответ дан 5 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: