我正在尝试解决hackerrank上的数据结构问题。我似乎找不到我的代码有什么问题。我想知道这里是否有问题。
Node* Insert(Node *head,int data){
struct Node *ptr = head,*new_node=(struct Node*)malloc(sizeof(struct Node));
new_node->data=data;
new_node->next=NULL;
if(ptr){
while(ptr->next != NULL){
ptr=ptr->next;
}
ptr->next=new_node;
}
else{
head=new_node;
}
return(head);
}
奇怪的是,几个月前我练习时也接受了同样的代码。这是问题的链接。
P.S。我已经花了几个小时来弄清楚,我不确定是否是一个提出问题的地方。如果不是,我愿意删除它。
编辑:
Node is defined as
struct Node
{
int data;
struct Node *next;
}
首先是 typedef
避免命名不匹配的结构。
struct node {
int data;
struct node *next;
};
typedef struct node Node;
Insert()
函数应为
void Insert(Node **head,int data){
while(*head){
head = &(*head)->next;
}
*head = malloc(sizeof **head);
(*head)->data=data;
(*head)->next=NULL;
}
并像这样
致电Insert()
int main() {
Node *headptr = 0;
Insert(&headptr, 100);/*pass the address of headptr */
/*..
display(headptr);
*/
return 0;
}
我认为您的代码是不正确的,这是由于误解了如何按价值传递的指针,在您的情况下,如果列表为空,则会这样做:
head=new_node;
但这会将新节点分配给不头部,而是将新节点分配给某个临时头指针副本(头(,您的真正头仍然为空,因此您必须将指针传递给指针到达:
Node* Insert(Node **head,int data)
和分配:
*head = new_node;