我正在尝试理解按位置插入C中的链接列表。我通过http://www.cprogramming.com/snippets/source-code/singly-linked-list-insert-remove-add-count找到了此代码:
void addafter(int num, int loc)
{
int i;
struct node *temp,*left,*right;
right=head;
for(i=1;i<loc;i++)
{
left=right;
right=right->next;
}
temp=(struct node *)malloc(sizeof(struct node));
temp->data=num;
left->next=temp;
left=temp;
left->next=right;
return;
}
它编译并且工作正常,但是我不理解这一部分:
left->next=temp;
left=temp;
left->next=right;
如果左边的下一个节点指针指向temp,那么它是否会被left = temp覆盖?你可以把它重写为:
left->next=temp;
temp->next=right
有人可以向我解释一下吗?谢谢。
答案 0 :(得分:1)
您的提议与原始代码中的提议相同。 它是赋给指针的值(因为temp,left,right是指针),所以list元素不会被写入覆盖
left=temp;
但“temp”指针下的元素也可以在“left”指针下使用。
就我个人而言,我同意您的代码更容易理解/阅读。所有这些都是关于编写匹配实际操作的代码,而不是使用其他变量或赋值来混淆代码。
无论如何,在了解了链表如何工作之后,你可以期待这样的功能会做什么,任何实现都更容易阅读和理解。
答案 1 :(得分:0)
您的解决方案同样正确。
更好的方法是消除正确的指针。
temp->next = left->next
left->next = temp
注意:您可能想要更改上面的一些代码