关注我,持续分享逻辑思维&管理思维&面试题; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;
有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。
【图解《程序员面试常见的十大算法》及代码实现】
-------------------------------------正文----------------------------------------
在C++中,如果你想在循环链表中插入一个节点,但又不希望遍历链表,你可以使用一个指针来直接指向插入位置的前一个节点。这里是一个简单的例子:
#include <iostream>
struct Node {
int value;
Node* next;
Node(int val) : value(val), next(nullptr) {}
};
// 插入节点到循环链表中,位置为pos,pos从0开始计数
void insertNode(Node*& head, Node* node, int pos) {
if (head == nullptr) {
head = node;
node->next = node; // 构成循环
return;
}
Node* current = head;
int i;
for (i = 0; i < pos; ++i) {
current = current->next;
}
node->next = current->next;
current->next = node;
// 如果插入位置是最后一个,需要修正尾指针
if (pos == countNodes(head) - 1) {
head = node; // 修正头指针
}
}
int main() {
Node* head = nullptr;
Node node1(1);
Node node2(2);
Node node3(3);
insertNode(head, &node1, 0); // 插入节点1在位置0
insertNode(head, &node2, 1); // 插入节点2在位置1
insertNode(head, &node3, 1); // 插入节点3在位置1
// 没有遍历链表的代码,直接输出node2的值
std::cout << "Node at position 1: " << node2.value << std::endl;
return 0;
}
在这个例子中,insertNode
函数通过一个引用传递的指针来操作头指针,从而插入节点而不遍历链表。这是通过直接定位到要插入位置的前一个节点来完成的。注意,这里假设循环链表已经存在,并且pos
是有效的位置索引。如果pos
是链表的长度,则插入到末尾,如果pos
超出了范围,则需要进行相应的错误处理。
感兴趣的同学辛苦 关注/点赞 ,持续分享逻辑、算法、管理、技术、人工智能相关的文章。
博主其它经典原创:《管理心得--如何高效进行跨部门合作》,《技术心得--如何成为优秀的架构师》、《管理心得--如何成为优秀的架构师》、《管理心理--程序员如何选择职业赛道》,及
《C#实例:SQL如何添加数据》,《C#实战分享--爬虫的基础原理及实现》欢迎大家阅读。