单链表的问题
所以我正在做删除节点的单链表,我做了3个函数,但不知何故,它创建了无限的数据,虽然它删除了我需要的数据。下面是我的代码:
Node delHead(Node head){
if(head==NULL){
printf("There is nothing to delete!");
}
else{
head=head->next;
}
return head;
}
Node delTail(Node head){
if(head==NULL||head->next==NULL){
return delHead(head);
}else{
Node p = head;
Node prev = NULL;
while(p->next !=NULL){
prev=p;
p=p->next;
}
prev->next= NULL;
free(p);
return head;
}
}
Node delAt(Node head, int position){
if(position == 0 || head == NULL || head->next == NULL){
head = delHead(head);
}else{
int k = 0;
Node p = head;
Node prev = NULL;
while(p != NULL && k != position){
prev = p;
p=p->next;
k++;
}
if(k != position){
head = delTail(head);
}else{
prev->next=p->next;
free(p);
}
}
return head;
}
我正在使用visual studio代码,所以我希望有人能用这个来修复我。我试着p->next->next,但没有成功,所以非常感谢你们。谢谢你!
1条答案
按热度按时间rxztt3cl1#
正如在另一条评论中提到的,您应该提供一个示例,说明您如何编码以及它给您的输出。我只注意到一个问题,你使用了一个节点而不是一个节点*作为参数,返回值和局部变量。我更改了代码并验证了您的原始函数是正确的。
技巧一:只有当引用指针时才能使用箭头表示法StructPtr->variable,否则必须使用点号法Struct.variable
*技巧2:指针只能设置为NULL。也就是说,可以将Node node设置为NULL,但不能将“Node node”**设置为NULL
输出: