下面的代碼給出錯誤,我不知道爲什麼。 下面的函數是將節點插入鏈表的末尾。在鏈表末尾插入節點
struct Node {
int data;
struct Node *next;
};
Node* Insert(struct Node *head,int data)
{
struct Node *p;
p=head;
struct Node *prev;
struct Node *temp=(struct Node*)malloc(sizeof(struct Node));
temp->data=data;
temp->next=NULL;
if(head==NULL){
head=temp;
return head;
//return temp;
} ``
while(p!=NULL){
prev=p;
p=p->next;
}
p=temp;//If we change this line to prev->next=temp .It is giving the correct result
return head;
}
在上面的代碼 如果我們更換線(p=temp;)
與prev->next=temp
它的工作原理。 請幫我理解這背後的邏輯。 在此先感謝。 問題來自hackrank。
試想想:將與分配後'p'發生什麼呢? – qrdl
如果兩個指針指向相同的內存位置,更改一個不會改變另一個。兩個指針都完全分開。如果你想改變另一個指針,你也可以使用指向指針的指針。但那會讓它變得更加複雜。 – wimh
[不要強制轉換'malloc'的返回值](http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) – MC93