【发布时间】:2013-06-27 22:57:57
【问题描述】:
下面是一个用于删除链表中第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),它应该删除列表中的第一个节点,但是当我调用另一个函数来打印列表时,它会打印随机地址。
4 个节点 列表中发生的情况示例,其中包含整数值 23、24、25 和 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
(比段错误更多的垃圾数字)
我的问题是如何修改我的代码以便它也可以删除第一个节点?
【问题讨论】:
-
head = deleteN(head, 1); -
^这也是正确的,谢谢。
标签: c recursion linked-list nodes