下面是一个旨在删除链表中第 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;
}
它工作正常,除非你调用 eg deleteN(head, 1)
,它应该删除列表中的第一个节点,但是当我调用另一个函数来打印列表时,它会打印随机地址。
在包含整数值23、24、25和26的4 个节点的列表中发生的事情的示例(在 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
(更多的垃圾号码然后是段错误)
我的问题是如何修改我的代码以便它也可以删除第一个节点?