我正在用C语言创建一个单链表,它有头部和尾部指针,其中头部指针指向SLL的起始节点,尾部指针指向SLL的最后一个节点。我不想使用head指针遍历到列表末尾来删除节点。有没有办法让我可以使用尾指针删除SLL的最后一个元素?
下面是节点添加函数。头部和尾部初始化为NULL。
void add_node_last(Node** head, Node** tail, int data) {
Node* new_node = (Node *) malloc(sizeof(Node));
new_node -> data = data;
new_node -> ptr = NULL;
if(*head == NULL && *tail == NULL) {
*head = new_node;
*tail = new_node;
return;
}
(*tail) -> ptr = new_node;
*tail = new_node;
}
要删除第一个节点,使用以下函数:
void del_first(Node **head) {
if(*head == NULL) {
return;
}
*head = (*head) -> ptr;
free(*head);
}
您可以释放节点的内存,但只能释放一次。在第一次删除之后,您的尾指针和第二个到最后一个节点的PTR
将是无效指针。为了确保两个指针始终正确,您要么遍历整个列表,要么使其成为一个双链表。
这是一个很长的说不的方法(感谢@斯塔克)。
公共类LinkedList11{//私有内部类节点 }
问题内容: 我正在练习使用链表节点,遇到了一个我不知道如何回答的问题。如何删除链接列表中的最后一个节点。下面的代码适用于所有条目的最后一个节点。最后一个不会被删除。 节点类别 主要 问题答案: 我想您的最后一个元素失败了。最后一个元素将没有元素。因此,不会将最后一个元素与传递的字符串进行比较。您应该使用调试器进行跟踪。
我正在尝试从单链接列表中删除最后一个节点。但我仍然无法在代码中解决此错误。我的方法没有删除最后一个节点。调用delete方法后,它仍然显示我要删除的节点。列表的其余部分将被删除,但最后一个节点本身不会被删除。你能告诉我我遗漏了什么,或者错误在哪里吗? LinkedList: 列表: 节点:
我正在做一个双链表的实现。我希望链表有一定的长度限制。当列表变长时,删除最后一个节点。我这里有些问题。我想定义尾巴,这样我就不必寻找终点。下面是我正在研究的实现,它将允许长度为4,然后开始删除最后一个节点。 它似乎在删除最后一个节点,但之后会打印一些奇怪的符号。我猜这是我如何释放的问题,但我想不出来。注意:此代码中的一些代码取自https://gist.github.com/mycodeschoo
下面是链接列表代码中的删除节点,它将头指针和要删除的位置作为参数(链接列表中的位置索引从零开始)。删除后,返回指向head的指针。 假设列表:20-2-19-7-3-6。要删除的位置是2(节点19要删除,因为索引从零开始)。 删除并打印后,它会显示:20-2-0-3-6。(即,直接位于已删除节点旁边的节点打印0) 但是如果我删除“free(head)”行,那么它将打印:20-2-7-3-6(正确)
我必须为我的项目实现一个单链表,我很难让删除方法工作。我在这里搜索了答案,但我找不到任何包含尾巴参考的答案。我的项目需要在列表中有一个头和尾引用,并且需要在任何必要的地方更新。这是我的类和删除方法: } 我已经经历了很多次这种方法的迭代,每次我要么丢失头部引用,要么丢失尾部引用,要么不删除元素,我都被难住了。作为参考,这里是我正在运行的测试。我甚至没有考试不及格,它只是说不及格。 编辑:忘记提到删