【问题标题】:Why in InsertHead function is l.head=p but not p=l.head if p=l.head, will there be any change? please answer for me thanks为什么 InsertHead 函数中是 l.head=p 而不是 p=l.head 如果 p=l.head,会有什么变化吗?请帮我回答谢谢
【发布时间】:2021-08-12 10:05:48
【问题描述】:

我收到一个错误并且 我的代码如下: 为什么 InsertHead 函数中是 l.head=p 而不是 p=l.head 如果 p=l.head,会有什么变化吗?请帮我解答谢谢

void InsertHead(list &l, int x)
{node *p ;`
p = GetNode(x) ;
if (p==NULL)
{
cout<<" node cannot be created!";
exit(1);
}
if (l.head==NULL) 
l.head = l.tail = p ;
else
{
p->next = l.head ;
l.head = p ;
}

【问题讨论】:

  • 您从哪里获得代码? listnodeGetNode 是什么?
  • p 似乎是要插入列表的新节点。修改局部变量p 不会对列表l 产生影响。问题不清楚
  • 如果我发布我所有的代码,它会太长,所以我会发布我问的代码,如果你不喜欢这个,我很抱歉
  • 喜不喜欢都无所谓。有关代码的问题需要发布minimal reproducible example
  • 下次会吸取教训,对此深表歉意

标签: c++ singly-linked-list


【解决方案1】:

假设这是原始列​​表 l->head = somenode 当调用 InsertHead 首先你应该创建一个新节点,调用GetNode,然后你得到一个新节点p, 那么您应该将此节点添加到列表中 p->next = l->head (somenode) 现在整个列表变成了p->somenode->.....,整个列表的新头是p,但是l->head 不改变。所以你应该调用 l->head = p

【讨论】:

    【解决方案2】:

    l.head=p 和 p=l.head 的区别

    l.head = p 表示您将p 的地址分配给l.head

    p=l.head 表示您将l.head 的地址分配给p

    例子

    假设你有两个变量

    int a = 5;
    int b = 10;
    

    现在如果你这样做a = ba 变为 10,b 保持不变,即 10

    如果你这样做b = ab 变为 5,a 保持不变,即 5

    【讨论】:

    • l.head = pps 值分配给l.headps 地址为 &amp;p
    • 所以如果我分配 l.head=p 那么我的 p 成为列表的头部,如果在 p->next =l.head 之前所以如果 p=l.head 然后 p=p->接下来是荒谬的吧?
    猜你喜欢
    • 2010-12-27
    • 2010-12-09
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 2015-10-08
    相关资源
    最近更新 更多