了解按位置插入链接列表

时间:2016-12-13 12:36:35

标签: c data-structures linked-list

我正在尝试理解按位置插入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

有人可以向我解释一下吗?谢谢。

2 个答案:

答案 0 :(得分:1)

您的提议与原始代码中的提议相同。 它是赋给指针的值(因为temp,left,right是指针),所以list元素不会被写入覆盖

left=temp;

但“temp”指针下的元素也可以在“left”指针下使用。

就我个人而言,我同意您的代码更容易理解/阅读。所有这些都是关于编写匹配实际操作的代码,而不是使用其他变量或赋值来混淆代码。

无论如何,在了解了链表如何工作之后,你可以期待这样的功能会做什么,任何实现都更容易阅读和理解。

答案 1 :(得分:0)

您的解决方案同样正确。
更好的方法是消除正确的指针。

temp->next = left->next
left->next = temp

注意:您可能想要更改上面的一些代码