gpt4 book ai didi

c - 删除链表中的第n个节点,不能删除第一个节点吗?

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:47 25 4
gpt4 key购买 nike

下面是一个函数,旨在删除链表中的第 n 个节点。例如,如果我调用 deleteN(head, 2)它将删除列表中的第二个节点。

node *deleteN(node *head, int n)
{

if (head == NULL)
return NULL;


if (n == 1)
{
node *temp = head;
//printf("the element is %d\n", temp->data);
head = temp->next;
free(temp);
return head;
}

head->next = deleteN(head->next, n-1);

return head;

}

它工作正常,除非你调用例如deleteN(head, 1) ,它应该删除列表中的第一个节点,但是当我调用另一个函数来打印列表时,它会打印随机地址。

包含整数值 232425 4 个节点 列表中发生的情况的示例strong>, 和 26 按顺序(在 main 中调用然后输出):

测试用例 1(通过):

deleteN(head, 2);

printList(head);

输出:

23

25

26

测试用例 2(通过):

deleteN(head, 3);

printList(head);

输出:

23

24

26

测试用例 3(通过):

deleteN(head, 4);

printList(head);

输出:

23

24

25

测试用例 4(失败):

deleteN(head, 1);

printList(head);

输出:

34223223

34234242

34342343

34343434

34234434

(比段错误更多的垃圾数字)

我的问题是如何修改我的代码以便它也可以删除第一个节点?

最佳答案

从你的问题中不清楚,但我怀疑你在调用 deleteN() 时没有更新 head。

这应该有效:

head=deleteN(head,1);
printList(head);

我认为这就是你正在做的:

deleteN(head,1);
printList(head);

关于c - 删除链表中的第n个节点,不能删除第一个节点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17354600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com