C++如何实现一个链表_C++数据结构中单链表的创建、插入与删除操作
首先定义节点结构,包含数据和指针插入;通过头插点或指定位置实现链表创建与扩展:

在C中实现单链表。点包含数据并指向下一个节点的指针。
//存储的数据ListNode* next; // 指向下一个节点的指针lt;pre class='brush:php;toolbar:false;'gt;//构造函数,方便初始化ListNode(int val) :data(val), next(nullptr) {}登录后复制
};创建链表(头插法)
说明:
立即学习”C免费学习笔记(深入)”;新建节点,内存分配将新节点的下一个指向当前头节点更新头指针指向新节点ListNode* head = nullptr;lt;pgt;void insertAtHead(int val) {ListNode* newNode = new ListNode(val);newNode-gt;next = head;head = newNode;}lt;/pgt;登录后复制在指定位置插入节点
插入前需删除到目标位置的前一个节点: 127查看详情 若插入位置为0,调用头插法否则从头遍历到pos-1位置修改指针:新节点接在当前位置后,原后续链重新连接 void insertAtPos(int pos, int val) { if (pos == 0) { insertAtHead(val); return; }lt;pre class='brush:php;toolbar:false;'gt;ListNode* curr = head;for (int i = 0; curr != nullptr amp;amp; i lt; pos - 1; i) { curr = curr-gt;next;}if (curr == nullptr) return; // 位置越界ListNode* newNode = new ListNode
(val);newNode-gt;next = curr-gt;next;curr-gt;next = newNode:若头节点为目标,先保存头指针,移动head,再删除旧头否则遍历查找,找到后跳过该节点并释放内存 void deleteByValue(int val) { ListNode* temp = head;lt;pre class='brush:php;toolbar:false;'gt;if (temp != nullptr amp;amp; temp-gt;data == val) { head = temp-gt;next;删除 temp; return;}ListNode* prev = nullptr;while (temp != nullptr amp;amp; temp-gt;data != val) { prev = temp; temp = temp-gt;next;}if (temp == nullptr) return; // 未找到 prev-gt;next = temp-gt;next;删除 temp: void printList() { ListNode* curr = head; while (curr != nullptr) { lt;stronggt;std::coutlt;/stronggt; lt;lt; curr-gt;data lt;lt; quot; -gt; quot;; curr = curr-gt;下一个; } lt;stronggt;std::coutlt;/stronggt; lt;lt; quot;nullptrquot; lt;lt; std::endl;}登录后复制
基本上就这些理,避免漏或野指针。单链表操作虽然基础,但边界情况要处理好,比如空链表、越界插入等。不复杂但容易忽略细节。
以上就是C如何实现一个链表_C阅读更多细内容,更多请关注乐哥常识网其他相关文章!相关标签:node c结构体指针数据结构大家都在看:怎样在C探索C函数C函数C数据结构?
