Я пишу код для разделения кругового связанного списка два связанных списков с равным количеством кодов, следующим мой код:Как разделить связанный список в два список
#include <stdio.h>
#include <stdlib.h>
typedef struct node *ptr;
struct node {
int element;
ptr prev;
ptr next;
};
typedef ptr list;
typedef ptr position;
int main() {
list L=malloc(sizeof(struct node));
list first=malloc(sizeof(struct node));
list second=malloc(sizeof(struct node));
splitlist(L,first,second);
return 0;
}
void splitlist(list L, list first,list second) {
position p,temp;
p=malloc(sizeof(struct node));
temp=malloc(sizeof(struct node));
p=L;
int count=0;
while ((p)->next != L) {
count++;
}
int c=count;
while (c!=(count/2)-1) {
p=(p)->next;
temp=(p)->next;
}
first=L;
(p)->next=NULL;
second=temp;
c=count;
while (c!=(count/2)-1) {
temp=(temp)->next;
}
(temp)->next=NULL;
}
При компиляции мой код не дает ошибок, но я не уверен, что он работает правильно.
Если количество узлов нечетное, в результате вы не получите 2 одинаковых размера списка. Очевидно. – BitTickler
0) 'list L = malloc (sizeof (struct node));' не создавать круговой связанный список. – BLUEPIXY
Ваши циклы while не будут прерваны, поскольку вы никогда не изменяете «переменную цикла». Если вам известно количество итераций, вы должны предпочесть для циклов, чтобы сделать код более читаемым. – BitTickler