Member 12726611 Ответов: 3

Напишите функцию для вставки целого числа в круговой связанный список _list, элементы которого сортируются в порядке возрастания (от наименьшего к наибольшему).


Входными данными для функции insertSortedList являются указатель start на некоторый узел в круговом списке и целое число n между 0 и 100. Возвращает указатель на только что вставленный узел.
Структура, которой следует следовать для узла кругового связанного списка, такова_
<pre lang="c++">Struct CNode ;
Typedef struct CNode cnode;
Struct CNode
{
Int  value;
Cnode* next;
};
Cnode* insertSortedList (cnode* start,int n
{
//WRITE YOUR CODE HERE
}
//FUNCTION SIGNATURE ENDS


Тест 1:
Ввод:
[3 - > 4-> 6 - & gt;1 - > 2 - & gt;^], 5
Ожидаемое Возвращаемое Значение:
[5-> 6 - > 1->2->3->4 - & gt;^]

Тест 2:
Ввод:
[1 - > 2->3->4-> 5->^], 0
Ожидаемое Возвращаемое Значение:
[0 - > 1 - >2->3->4-> 5->^]

Что я уже пробовал:

вот мой код

Cnode* insertSortedList (cnode* start,int n)
{
	int count=1,i,count1=0;
	
	
 	Cnode* temp=start;
 	Cnode* temp1=start;
 	Cnode* temp2=start;
	 Cnode* newHead=NULL;
 	
 	while(temp!=NULL)
	 {
 	temp=temp->next;
 	count ++;
 	}
 	
 	int arr[count];
 	arr[0]=n;
 	while(temp2!=NULL)
	 {
	 	for(j=1;j<count;j++)
	 	{
	 		arr[j]=temp->data;
	 		temp2=temp2->next;
		 }
 	}
 	
 	
 	while(n>=temp2->value)
 	{
 		temp2=temp2->next;
	 }
	 
	 newHead=temp2;
	 
	 for(i=0;i<count;i++)
	 {
	 	Cnode* newNode=new Cnode();
	 	
	 	newNode->data=arr[i];
	 	newNode->next=NULL;
	 }
	 return newNode;
}


может ли кто-нибудь сказать, что эта логика правильна, и может ли он настроить ссылки и сделать ее круговой

Mehdi Gholam

Домашнее задание - для вашей пользы, а не для нашей.

Richard MacCutchan

// НАПИШИТЕ СВОЙ КОД ЗДЕСЬ
Это инструкция для вас.

Member 12726611

Cnode* insertSortedList (cnode* start,int n)
{
int count=1, i, count1=0;


Cnode* temp=start;
Cnode* temp1=start;
Cnode* temp2=start;
Cnode* newHead=NULL;

while (temp!=NULL)
{
temp=temp - & gt;Далее;
считать ++;
}

int arr[count];

while (temp2!=NULL)
{
для (j=0;j< count; j++)
{
="" ОБР[Дж]=" "темп" -"&ГТ;сведения;
temp2=temp2 - & gt;Далее;
}
}


while (n>=temp2 - & gt;значение)
{
temp2=temp2 - & gt;Далее;
}

newHead=temp2;

for (i=0;i & lt;count; i++)
{
= ""cnode*= ""newnode=" new " cnode();
=""
= ""newnode-=" " > data=arr[i];
newNode - > next=NULL;
}

}

Philippe Mori

Вы должны сами отлаживать программу с помощью отладчика.

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

Кстати, что представляет ^ в ваших образцовых данных?

Member 14785571

Братан я получаю ошибки

3 Ответов

Рейтинг:
2

OriginalGriff

Мы не делаем домашнее задание: оно задано не просто так. Она существует для того, чтобы вы думали о том, что вам сказали, и пытались понять это. Он также существует для того, чтобы ваш наставник мог определить области, в которых вы слабы, и сосредоточить больше внимания на корректирующих действиях.

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!


Member 12726611

Cnode* insertSortedList (cnode* start,int n)
{
int count=1, i, count1=0;
Cnode* temp=start;
Cnode* temp1=start;
Cnode* temp2=start;
Cnode* newHead=NULL;

while (temp!=NULL)
{
temp=temp - & gt;Далее;
считать ++;
}

int arr[count];

while (temp2!=NULL)
{
для (j=0;j< count; j++)
{
="" ОБР[Дж]=" "темп" -"&ГТ;сведения;
temp2=temp2 - & gt;Далее;
}
}


while (n>=temp2 - & gt;значение)
{
temp2=temp2 - & gt;Далее;
}

newHead=temp2;

for (i=0;i & lt;count; i++)
{
= ""cnode*= ""newnode=" new " cnode();
=""
= ""newnode-=" " > data=arr[i];
newNode - > next=NULL;
}

}

OriginalGriff

И что?

Member 12726611

я скопировал заполнить массив и вставить 1 элемент в новой ЛЛ а-н-и скопированы остальные ЛЛ от prevoiusly скопировать массив

вот некоторые изменения:
while (temp!=NULL)
{
temp=temp - & gt;Далее;
считать ++;
}

int arr[count];
arr[0]=n;
while (temp2!=NULL)
{
для(j=1;j< count; j++)
{
="" ОБР[Дж]=" "темп" -"&ГТ;сведения;
temp2=temp2 - & gt;Далее;
}
}
верен ли мой подход?
можете ли вы настроить ссылки и сделать их круглыми?

OriginalGriff

Что ж...предполагается, что вы вставляете в существующий сортированный список-так зачем же копировать? Все, что вам нужно, это найти место, куда он должен идти: узел до и узел после. Затем просто отрегулируйте указатели, чтобы новый элемент поместился между ними.

Рейтинг:
1

CPallini

Цитата:
может ли кто-нибудь написать код c/c++ для вышеуказанной проблемы
Мы, вероятно, могли бы, но это зависит от вас.

Цитата:
Я попытался сделать это, но не смог вернуть указатель
Что ты имеешь в виду, конкретно?
Вы должны быть в состоянии построить упорядоченный список.
Попробуйте с карандашом и бумагой начать с добавления первого пункта в пустой список. Как только вы поймете логику, вы можете начать писать код.


Member 12726611

Cnode* insertSortedList (cnode* start,int n)
{
int count=1, i, count1=0;


Cnode* temp=start;
Cnode* temp1=start;
Cnode* temp2=start;
Cnode* newHead=NULL;

while (temp!=NULL)
{
temp=temp - & gt;Далее;
считать ++;
}

int arr[count];

while (temp2!=NULL)
{
для (j=0;j< count; j++)
{
="" ОБР[Дж]=" "темп" -"&ГТ;сведения;
temp2=temp2 - & gt;Далее;
}
}


while (n>=temp2 - & gt;значение)
{
temp2=temp2 - & gt;Далее;
}

newHead=temp2;

for (i=0;i & lt;count; i++)
{
= ""cnode*= ""newnode=" new " cnode();
=""
= ""newnode-=" " > data=arr[i];
newNode - > next=NULL;
}

}

Рейтинг:
0

Patrice T

Мы не делаем вашу домашнюю работу.
Домашнее задание не предназначено для проверки ваших навыков просить других людей выполнять вашу работу, оно предназначено для того, чтобы помочь вашему учителю проверить ваше понимание пройденных вами курсов, а также проблем, возникающих при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по их исправлению.
Итак, начинайте работать. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.

Цитата:
Я попытался сделать это, но не смог вернуть указатель
Покажите этот код.

[Обновление]
Cnode* insertSortedList (cnode* start,int n)
{
    int count=1,i,count1=0;

    Cnode* temp=start;
    Cnode* temp1=start;
    Cnode* temp2=start;
    Cnode* newHead=NULL;

    // One principle with circular linked list is that ->next is never NULL
    while(temp!=NULL)
    {
        temp=temp->next;
        count ++;
    }

    int arr[count]; // you can declare a dynamic array this way, toy need to use apointer and malloc
    // One principle with circular linked list is that there is no need to copy it to insert a new element somewhere
    arr[0]=n;
    while(temp2!=NULL)
    {
        for(j=1;j<count;j++)
        {
            arr[j]=temp->data;
            temp2=temp2->next;
        }
    }

    // wrong logic here
    while(n>=temp2->value)
    {
        temp2=temp2->next;
    }

    newHead=temp2;

    for(i=0;i<count;i++)
    {
        Cnode* newNode=new Cnode();

        newNode->data=arr[i];
        newNode->next=NULL;
    }
    return newNode;
}


Совет:
Возьмите лист бумаги и нарисуйте start и list для различных ситуаций.
- Пустой список
- список из 1 элемента
- список из 2 элементов
- список из 5 элементов
Возьмем в качестве примера список из 5 элементов и попробуем придумать, как с ними обращаться и каков результат:
- добавить элемент меньше любого элемента списка
- добавить элемент больше, чем любой элемент списка
- добавить элемент, равный наименьшему элементу списка
- добавить элемент, равный самому большому элементу списка
- добавить элемент, который идет в середине списка
Вы получите лучшее представление о том, как это работает.
Помнить это start обычно это не самый маленький элемент.

Примечание: в [5->6->1->2->3->4->^] положение элементов не имеет значения.
- это ценность next которые составляют список и порядок элементов
- список является круговым, если next от точки наивысшего элемента к точке наименьшего.


Member 12726611

Cnode* insertSortedList (cnode* start,int n)
{
int count=1, i, count1=0;


Cnode* temp=start;
Cnode* temp1=start;
Cnode* temp2=start;
Cnode* newHead=NULL;

while (temp!=NULL)
{
temp=temp - & gt;Далее;
считать ++;
}

int arr[count];

while (temp2!=NULL)
{
для (j=0;j< count; j++)
{
="" ОБР[Дж]=" "темп" -"&ГТ;сведения;
temp2=temp2 - & gt;Далее;
}
}


while (n>=temp2 - & gt;значение)
{
temp2=temp2 - & gt;Далее;
}

newHead=temp2;

for (i=0;i & lt;count; i++)
{
= ""cnode*= ""newnode=" new " cnode();
=""
= ""newnode-=" " > data=arr[i];
newNode - > next=NULL;
}

}

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.