Я пытаюсь понять алгоритм MarchingCube: мой предыдущий вопрос был это. Теперь я застрял в одной функции, в которую вставляется узел (который содержит каждую сетку всего куба в виде структуры связанного списка). Я могу понять первые несколько строк кода, но когда я смотрю на код, я нахожу часть кода избыточной.
NODE *Insert(NODE *listset, NODE *tmpNode) {
1 NODE *temp;
2
3 if(listset == NULL) return tmpNode;
4 else {
5 tmpNode->next = listset->next;
6 listset->next = tmpNode;
7 return listset;
8 }
9 temp = listset;
10 if(temp->next == NULL) {
11 if(temp->depth > tmpNode->depth) temp->next = tmpNode;
12 else {
13 tmpNode->next = temp;
14 listset = tmpNode;
15 }
16 return listset;
17 }
18 while(temp->next != NULL) {
19 if(temp->next->depth > tmpNode->depth) temp = temp->next;
20 else {
21 tmpNode->next = temp->next;
22 temp->next = tmpNode;
23 return listset;
24 }
25 }
26 temp->next = tmpNode;
27 return listset;
}
В этой функции от 1 до 8 имеет смысл (это просто вставка нового узла в конец). Как код мог достичь этой точки (я имею в виду код с 9 по 27) ?? Это вообще необходимо??
Может кто-нибудь объяснить, что происходит в части 9-27.