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



下面是一个函数,旨在删除链表中的第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 %dn", temp->data);
        head = temp->next;
        free(temp);
        return head;
    }
    head->next = deleteN(head->next, n-1);
    return head;
}

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

包含整数值 23、2425264 个节点列表中发生的情况示例(在 main then output 中称为(:

测试用例 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);

你从 deleteN 返回一个值,但你不使用它。您需要更新head

head = deleteN(head, n);

相关内容

  • 没有找到相关文章

最新更新