本文主要讲解设计链表中的第3个问题:
链表末尾添加一个节点
void addAtTail(int val)
将一个值为val
的节点追加到链表中作为链表的最后一个元素。
c++代码如下,末尾
具体要点:
1.定义临时指针cur,遍历到尾部,而不是使用头节点head进行遍历(因为head指向的值不断变化,最后无法返回原先的头节点)
2.既然cur要遍历到尾部那么,什么条件算是尾部呢?
当下一个节点是Null时,即我们到达了尾部
cur -> next==Null
3.然后使用链表常用操作:定义一个虚拟头节点dummyHead
4.循环内执行什么操作?
不断更新临时指针,指向下一个节点
cur=cur->next
5.需要考虑的细节:while中的是判断条件是 cur!=Null 还是判断 cur->next!=Null 呢?
对于这种问题,我们只要考虑一下头节点的情况就好
当链表只有一个节点,即头节点时,需要删除的也是这个头节点
由于我们定义了dummyHead,所以开始时cur=dummyHead
我们需要判断是 cur->next!=Null 因为cur->next才是头节点
可以参考这个博客,里面也涉及了差不多的边界条件的考虑
c++代码如下
void addAtTail(int val) {
LinkedNode* newNode = new LinkedNode(val);
LinkedNode* cur = _dummyHead;
while(cur->next != nullptr){
cur = cur->next;
}
cur->next = newNode;
_size++;
}