Учитывая список, я хочу изменить список, поменяв местами первое с последним, второе со вторым последним и т. Д.
Я написал эту функцию, чтобы поменять местами каждую пару, где pos1
и pos2
- это две позиции, которые нужно поменять местами.
maxPos
- это наибольшая из двух позиций, node1
и node2
- это две вершины, найденные после обхода списка.
int swap(struct node *list, int pos1, int pos2) {
if (node1 != NULL && node2 != NULL) {
if (prev1 != NULL)
prev1->next = node2;
if (prev2 != NULL)
prev2->next = node1;
temp = node1->next;
node1->next = node2->next;
node2->next = temp;
if (prev1 == NULL)
head = node2;
else if (prev2 == NULL)
head = node1;
}
return 1;
}
Вместо того, чтобы вызывать это рекурсивно для каждой пары, т.е.(1,n-1)
, (2,n-2)
, (3,n-3)
, для которого он должен каждый раз проходить по списку, мне было интересно, есть ли способ решить его итеративно.