将节点添加到链接列表的前面

Fro*_*raw 4 c++

我真的很困惑这里到底发生了什么......

我有这个功能

void addToFront(int data)  
{
  Node* tmp = new Node();
  tmp -> data = data;
  tmp -> next = head;
  head = tmp;
}
Run Code Online (Sandbox Code Playgroud)

因此,当我们执行该行时tmp-> next = head,我们使tmp指针指向head指向的内容(列表的当前第一个元素)?因为这就是它的感觉,但是这不仅仅是指向它head吗?然后当我们这样做时head = tmp,我们正在指向我们创建的新节点,对吗?

Sad*_*que 13

这就是你的清单(假设)

 +----+-----+   +-----+-----+   +-----+------+
 |  A |     +-->|     |     +-->|     |      |
 +----+-----+   +-----+-----+   +-----+------+
 /
Run Code Online (Sandbox Code Playgroud)

Head指向位置A.

您创建一个新节点

 +----+----+
 | B  |    |
 +----+----+
 /
Run Code Online (Sandbox Code Playgroud)

tmp现在指向B.您插入数据tmp->data,然后生成tmp -> next = head;.所以现在我们有:

 +----+----+     +----+-----+   +-----+-----+   +-----+------+
 | B  |next|---->|  A |     +-->|     |     +-->|     |      |
 +----+----+     +----+-----+   +-----+-----+   +-----+------+
                  /
Run Code Online (Sandbox Code Playgroud)

然后你head指出B而不是A.

 +----+----+     +----+-----+   +-----+-----+   +-----+------+
 | B  |next|---->|  A |     +-->|     |     +-->|     |      |
 +----+----+     +----+-----+   +-----+-----+   +-----+------+
 /  \
Run Code Online (Sandbox Code Playgroud)

head并tmp指向B现在.