Я попытался решить эту проблему, но мне удалось ее частично решить.добавить элемент после элемента specialiec в связанном списке и удалить первый элемент
Моя проблема в этом методе является то, что мне нужно, чтобы добавить элемент после другого элемента:
Пример: add 5 1
5 представляет собой элемент в связанном списке, но я хочу добавить 1 после того, как 5 .
Пример: пусть связанный список содержит следующие элементы: 2 3 7
я называю метод, чтобы добавить 1 AFTE r 3, add 3 1
, поэтому результат должен быть 2 3 1 7
, но с моим методом результат 2 1 3 7
, что является моей проблемой.
Вторая проблема заключается в том, что я не могу иметь дело с первым элементом:
Пример: add 2 1
Он действует как если первый элемент не существует:
void addNodeAtPos(link *head, int pos,int addelement)
{
link prev=NULL;
link curr =*head;
link newNode = (link)malloc(sizeof(node));
newNode->data = addelement;
while(curr->next != NULL)
{
prev = curr;
curr = curr->next;
if(curr->data == pos)
{
newNode->next = curr;
prev->next = newNode;
break;
}
}
}
Мои проблема заключается в том, что я не могу удалить первый элемент:
void deletenode(link *head,int s){
bool found = false;
node *curr = *head, *prev=NULL;
while(curr != NULL){
// match found, delete
if(curr->data == s){
found = true;
// found at top
if(prev == NULL){
link temp = *head;
curr->next= prev;
delete(temp);
// found in list - not top
}else{
prev->next = curr->next;
delete(curr);
} }
// not found, advance pointers
if(!found){
prev = curr;
curr = curr->next; }
// found, exit loop
else curr = NULL; }
}
Я предлагаю вам запустить программу в отладчике, и пошагово функция вставки по строкам. Тогда ваши проблемы с вставкой должны стать очень очевидными. Включая еще одну проблему, а именно, что вы не можете вставить новый первый узел. –
Проблема в этом пункте 'newNode-> next = curr; prev-> next = newNode; ' Он должен быть исправлен. –
Кроме того, если у вас есть две проблемы с двумя различными функциями, вы должны задать два вопроса. –