链表中新节点如何添加并成为新头?关于Add方法else代码块执行逻辑的疑问
理解单链表头插法的Add方法逻辑
先把你给出的代码格式化出来,方便我们分析:
public void Add(Node<T> newItem) { if(this.First==null) { this.First = newItem; this.Last = newItem; } else { newItem.next = this.First; this.First = newItem; } Count++; }
这段代码实现的是单链表的头插法——简单说就是每次新增的节点都会成为链表的第一个节点,而不是追加到末尾。我用具体的例子一步步帮你拆解else块的操作:
假设现在链表已经有节点了:比如当前First指向节点A(这是链表的第一个节点),Last指向节点A(因为只有一个节点时首尾都是它)。现在我们要插入新节点B。
第一步执行
newItem.next = this.First;
这里的newItem就是节点B,这行代码是把B的next指针指向当前链表的第一个节点A。相当于给B“牵了根线”连到A,这样B后面就跟着原来的整个链表了。第二步执行
this.First = newItem;
这行代码是把链表的First指针(也就是链表的“起点标识”)更新为节点B。现在当你从链表的起点开始遍历,第一个遇到的就是B,再通过B的next就能找到A,完美把新节点嵌到了链表的最前面。
最后Count++只是把节点总数加1,这个逻辑很直观。
举个更形象的例子:原来的链表是「A → null」(因为只有A一个节点),插入B之后就变成了「B → A → null」,First指向B,Last还是指向A(因为这段代码的头插法不会更新Last,只有当链表为空的时候才会设置Last)。
这样是不是就清楚啦?
内容的提问来源于stack exchange,提问作者Sarvesh Patil
相关产品推荐
相关产品推荐

