【发布时间】:2020-08-23 04:06:32
【问题描述】:
我想删除包含“k”的简单链表中的元素。
我能够在name = popIfK(&kopf); 中获得“k”
现在在函数popIfK(...) 中,我必须在元素之后指向元素之前的元素。我该如何解决?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct V_LISTE
{
char vorname;
struct V_LISTE *nachfolger;
};
struct V_LISTE *insert(struct V_LISTE *list, char key)
{
struct V_LISTE *newElement;
newElement = (struct V_LISTE *) malloc(sizeof(struct V_LISTE));
newElement->vorname = key;
newElement->nachfolger = list;
list = newElement;
return list;
}
char popIfK(struct V_LISTE **kopf)
{
char *returnVal;
struct V_LISTE *kElement;
kElement = (*kopf)->nachfolger;
while (kElement->vorname != 'k')
{
kElement = kElement->nachfolger;
}
returnVal = &kElement->vorname;
// Nun muss das Element davor auf das danach zeigen
// und Speicher von dem Element mit k muss freigegeben werden
free(*kopf);
*kopf = kElement;
return *returnVal;
}
void ausgabe(struct V_LISTE *list)
{
while (list != NULL)
{
printf("%c", list->vorname);
list = list->nachfolger;
}
printf("\n");
}
int main()
{
struct V_LISTE *kopf;
kopf = (struct V_LISTE *) malloc(sizeof(struct V_LISTE));
kopf->vorname = 'n';
kopf->nachfolger = NULL;
kopf = insert(kopf, 'n');
kopf = insert(kopf, 'a');
kopf = insert(kopf, 'k');
kopf = insert(kopf, ' ');
kopf = insert(kopf, 'o');
kopf = insert(kopf, 'l');
kopf = insert(kopf, 'i');
kopf = insert(kopf, 'T');
ausgabe(kopf);
printf("Nun müsste ein 'k' kommen:\n");
name = popIfK(&kopf);
printf("%c\n", name);
printf("Nun müsste \"Tilo ann\" kommen:\n");
ausgabe(kopf);
}
所以我的问题如下:
ausgabe(kopf) 给出输出:Tilo kann
在第二次调用ausgabe(kopf) 使用函数name = popIfK(&kopf); 后,我期望输出:Tilo ann
但我得到的输出是:kann
那么,我该如何解决呢?
【问题讨论】:
-
那么问题出在哪里?你的代码编译了吗?你的代码做的事情是否超出了你的预期?预期输出与实际输出是多少?阅读:How to Ask
-
编辑:你说得对——我现在更准确地描述了这个问题。
标签: c struct linked-list singly-linked-list erase