单向链表添加元素操作
創建單向鏈表
先創建鏈表并且初始化
添加元素操作
Size一個都沒有的時候
證明是空鏈表
前插法
意思就是往前添加元素
第一步 : 創建結點
可以用C++ 的 new 創建結點 或者 用面向過程 的 function 來 創建
函數聲明
//創建單向鏈表結點 //創建鏈表頭結點的函數 //參數:LinkNode* where = nullptr //LinkNode* where目的是給list->next賦值、不初始化數據域 LinkNode* creatorLinkNode(LinkNode* where = nullptr);//創建單向鏈表結點 //參數:const ElemType &elem //const ElemType &elem 目的是給 新結點的數據域初始化、不初始化指針域 LinkNode* creatorLinkNode(const ElemType &elem);函數實現
LinkNode* creatorLinkNode(LinkNode* where){LinkNode* node = new LinkNode;node->next = where;return node;}LinkNode* creatorLinkNode(const ElemType& elem) {return new LinkNode{ elem ,nullptr}; }創建結點
第二步 : 鏈接結點
鏈接結點
參數 LinkNode& node, LinkNode& newnode**
鏈接思路:
如果(node->next)不是空指針
新結點的下一個結點指向傳入結點的下一個結點
否則
結點的下一個結點指向新結點
相當于 3->5
4是新結點
4->5
4鏈接5
3的下一個結點指向4結點
3->4->5
偽代碼::
如果(結點的next!=空指針){//為真
新結點的next指針指向 結點的next指針;;
}
結點的next指針指向 新結點;
函數聲明
/* 鏈接結點 參數 LinkNode*& node, LinkNode*& newnode 鏈接思路: 如果(node->next)不是空指針 新結點的下一個結點指向傳入結點的下一個結點 否則 結點的下一個結點指向新結點相當于 3->54是新結點4->54鏈接53的下一個結點指向4結點3->4->5if(node->next){newnode->next = node->next;} node->next = newnode; */ void Link(LinkNode*& node, LinkNode*& newnode)函數實現
void Link(LinkNode*& node, LinkNode*& newnode){if (node->next) {newnode->next = node->next;}node->next = newnode; }鏈接 第一步
鏈接 第二步
第三步 把鏈表的頭結點傳遞到Link函數
Link(List.list, Newnode);第四步 鏈表的個數+1
++List.size;前插法 代碼
//LinkNode* &Newnode 主調函數 分配內存 void LinkListInsert_froot(LinkList& List, LinkNode* &Newnode) {Link(List.list, Newnode);++List.size; }尾插法
意思就是靠后添加元素
第一步 : 創建結點
可以用C++ 的 new 創建結點 或者 用面向過程 的 function 來 創建
函數聲明
//創建單向鏈表結點 //創建鏈表頭結點的函數 //參數:LinkNode* where = nullptr //LinkNode* where目的是給list->next賦值、不初始化數據域 LinkNode* creatorLinkNode(LinkNode* where = nullptr);//創建單向鏈表結點 //參數:const ElemType &elem //const ElemType &elem 目的是給 新結點的數據域初始化、不初始化指針域 LinkNode* creatorLinkNode(const ElemType &elem);函數實現
LinkNode* creatorLinkNode(LinkNode* where){LinkNode* node = new LinkNode;node->next = where;return node;}LinkNode* creatorLinkNode(const ElemType& elem) {return new LinkNode{ elem ,nullptr}; }創建結點
循環找到末尾結點
while (current->next){current = current->next;}第二步 : 鏈接結點
鏈接結點
參數 LinkNode& node, LinkNode& newnode**
鏈接思路:
如果(node->next)不是空指針
新結點的下一個結點指向傳入結點的下一個結點
否則
結點的下一個結點指向新結點
相當于 3->5
4是新結點
4->5
4鏈接5
3的下一個結點指向4結點
3->4->5
偽代碼::
如果(結點的next!=空指針){//為真
新結點的next指針指向 結點的next指針;;
}
結點的next指針指向 新結點;
函數聲明
/* 鏈接結點 參數 LinkNode*& node, LinkNode*& newnode 鏈接思路: 如果(node->next)不是空指針 新結點的下一個結點指向傳入結點的下一個結點 否則 結點的下一個結點指向新結點相當于 3->54是新結點4->54鏈接53的下一個結點指向4結點3->4->5if(node->next){newnode->next = node->next;} node->next = newnode; */ void Link(LinkNode*& node, LinkNode*& newnode)函數實現
void Link(LinkNode*& node, LinkNode*& newnode){if (node->next) {newnode->next = node->next;}node->next = newnode; }把Current傳遞到Link函數
鏈接 第一步
鏈接 第二步
Link(Current, Newnode);第四步 鏈表的個數+1
++List.size;尾插法 代碼
void LinkListInsert_back(LinkList& List, LinkNode*& Newnode) {LinkNode* current = List.list;while (current->next){current = current->next;}Link(current, Newnode);++List.size; } ``總結
以上是生活随笔為你收集整理的单向链表添加元素操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十行代码实现浏览器自动刷新
- 下一篇: 测试环境搭建心得