Заданный вопрос написать функцию split(), которая копирует содержимое связанного списка в два других связанных списка. Функция копирует узлы с четными индексами (0,2 и т. Д.) В EvenList и узлы с нечетными индексами в oddList. Исходный связанный список не должен изменяться. Предположим, что evenlist и oddlist будут переданы в функцию в виде пустых списков (* ptrEvenList = * ptrOddList = NULL).Разделить связанный список на два других списка, один с нечетными индексами, другой с четными индексами
В моей программе он может отображать начальный список. Хотя в двух других списках есть что-то не так. И это приводит к завершению работы программы.
#include<stdio.h>
#include<stdlib.h>
#define SIZE 9
// определить структуру списка узлов
typedef struct node{
int item;
struct node *next;
}ListNode;
// вызываем функции
int search(ListNode *head,int value);
void printNode(ListNode *head);
void split(ListNode *head,ListNode **OddList,ListNode **EvenList);
// главная функция
int main(){
ListNode *head=NULL;
ListNode *temp;
ListNode *OddList=NULL;
ListNode *EvenList=NULL;
// в вопрос, он попросил меня передать два пустых списка в Функция 'slipt'
int ar[SIZE]={1,3,5,2,4,6,19,16,7};
int value=0;
int i;
head=(struct node*)malloc(sizeof(ListNode));
temp=head;
for(i=0;i<SIZE;i++){
temp->item=ar[i];
if(i==(SIZE-1)) //last item
break;
temp->next=(struct node*)malloc(sizeof(ListNode));
temp=temp->next;
}
temp->next=NULL;
printf("Current list:");
printNode(head);
split(head,&OddList,&EvenList);
return 0;
}
**** !!!!!!!!! проблема, я думаю, в этой части.
void split(ListNode *head,ListNode **ptrOddList,ListNode **ptrEvenList){
int remainder;
ListNode *tempO,*tempE,*temp;
if (head==NULL)
return;
else{
temp=head;
*ptrOddList=(struct node*)malloc(sizeof(ListNode));
*ptrEvenList=(struct node*)malloc(sizeof(ListNode));
tempO=*ptrOddList;
tempE=*ptrEvenList;
while(temp!=NULL){
remainder=temp->item%2;
if(remainder==0){
tempE->next=(struct node*)malloc(sizeof(ListNode));
tempE->item=temp->item;
tempE=tempE->next;
}
else{
tempO->next=(struct node*)malloc(sizeof(ListNode));
tempO->item=temp->item;
tempO=tempO->next;
}
temp=temp->next;
}
tempE=NULL;
tempO=NULL;
// Я также попытался tempE->next=NULL;
и tempO->next=NULL
// программа может работать, если я могу изменить его, как и выше, но последние две цифры, показанные будут две случайные числа.
printf("Even List:");
printNode((*ptrEvenList));
printf("Odd List:");
printNode((*ptrOddList));
}
}
// функция используется для распечатки результатов
void printNode(ListNode *head){
if (head==NULL)
return;
while(head!=NULL){
printf("%d ",head->item);
head=head->next;
}
printf("\n");
}
Пожалуйста, сузить его, никто не будет читать, что много кода –