xiaoweiChen / CPP-Concurrency-In-Action-2ed-2019

:book: 作为对《C++ Concurrency in Action - SECOND EDITION》的中文翻译。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

7.2.1有疑问

weikano opened this issue · comments

原文中提到

最简单的栈就是链表, head指针指向第一个节点(可能是下一个被索引到的节点), 并且每个节点依次指向下一个节点。
在这样的情况下,添加一个节点相对来说很简单:

  1. 创建一个新节点
  2. 将新节点的next指针指向当前的head节点
  3. 让head节点指向新节点

举个栗子,head->A->B,新添加一个节点C,最后不应该是head->C->A->B吗?

const node* C = new node(c);
C->next = head->next; //C->next指向A->B
head->next = C; //head->next指向C->A->B

不知道是不是我理解的有问题?

你理解的是对的。
这里是要实现的栈结构,先入后出。
head指针指向的的就是下一个要出栈的node。

拿你的例子,head->A->B,新添加一个节点C。
因为先入后出的原则,那么下一个要出栈的元素就是C,所以是head->C->A->B没有问题。

嗯,其实我不太清楚你的疑惑点在哪里

  1. 将新节点的next指针指向当前的head指针
  2. 让head节点指向新节点

第2步不应该将新节点的next指针指向head的next吗?
第3步才是修改head->next指向新节点?

这里的确是有误的。
我将push和pop的逐个列出的过程都修改了,就是对这里1,2,3...里面的内容进行了修改。
这里就脱离原文了,这里需要描述的更加准确些,这样便于理解,