Обзор
Насколько я понимаю вопрос, вы просто хотите удалить подсписок из единого связанного списка, например, list = el1 -> el2 -> el5 -> el6 -> el3 -> null
. Когда вы звоните split(list, 2, 2)
, результатом будет два списка list and list1
с list = el1 -> el2 -> el3 -> null
и list1 = el5 -> el6 -> null
.
Но не совсем ясно, с какой реальной проблемой вы сталкиваетесь и с чем вы до сих пор пытался заставить его работать?
Ответ
Из того, как я прочитал вопрос, не очень важно, как выглядит содержимое каждого элемента списка. Так почему бы вам просто не взять свой struct Node
из примера и заменить поле int value
на address value
следующим образом:
typedef struct {
char name[30];
char storage[5];
char screen[5];
int price;
} address;
struct Node
{
address value;
struct Node *next;
};
Есть несколько проблем в вашем коде, которые вы можете захотеть изменить. 1. Ваша функция разбиения устанавливает переданный в указатель head
значение NULL. Это может быть нежелательное поведение 2. Вы возвращаете структуру из split(...)
. Поскольку все в C передается по значению, вы можете рассмотреть возможность передачи (двойного) указателя на split(...)
и поместить туда полученный ListPair
, потому что тогда ListPair
не нужно копировать при возврате из функции 3. Обычно вы бы не использовали _t
для имени структуры, но не для самой typedef. 4. Вы вводите определение структуры address_t
и вводите определение типа с помощью elementtype
, но никогда не используете address
5. У вас есть определение типа, у которого нет имени
typedef struct node{
elementtype element;
node *next;
};
Просто удалите typedef
в этой строке, потому что вы уже сделали typedef на одну строку раньше.