快捷搜索:  汽车  科技

单链表实现在哪插入元素(单向链表添加元素操作)

单链表实现在哪插入元素(单向链表添加元素操作)相当于 3->54是新结点4->54链接53的下一个结点指向4结点3->4->5链接结点参数 LinkNode& node LinkNode& newnode**链接思路:如果(node->next)不是空指针新结点的下一个结点指向传入结点的下一个结点否则结点的下一个结点指向新结点函数声明//创建单向链表结点 //创建链表头结点的函数 //参数:LinkNode* where = nullptr //LinkNode* where目的是给list->next赋值、不初始化数据域 LinkNode* creatorLinkNode(LinkNode* where = nullptr); //创建单向链表结点 //参数:const ElemType &elem //const ElemType &elem 目的是给 新结点的数据域初始化、不初

创建单向链表

先创建链表并且初始化

单链表实现在哪插入元素(单向链表添加元素操作)(1)

添加元素操作Size一个都没有的时候

单链表实现在哪插入元素(单向链表添加元素操作)(2)


证明是空链表

前插法

意思就是往前添加元素

第一步 : 创建结点

可以用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}; }

创建节点

单链表实现在哪插入元素(单向链表添加元素操作)(3)

第二步 : 链接结点

链接结点
参数 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->5 4是新结点 4->5 4链接5 3的下一个结点指向4结点 3->4->5 if(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; } 链接 第一步

单链表实现在哪插入元素(单向链表添加元素操作)(4)

链接 第二步

单链表实现在哪插入元素(单向链表添加元素操作)(5)

第三步 把链表的头结点传递到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}; }

创建结点

单链表实现在哪插入元素(单向链表添加元素操作)(6)

循环找到末尾结点

单链表实现在哪插入元素(单向链表添加元素操作)(7)

单链表实现在哪插入元素(单向链表添加元素操作)(8)

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->5 4是新结点 4->5 4链接5 3的下一个结点指向4结点 3->4->5 if(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函数链接 第一步

单链表实现在哪插入元素(单向链表添加元素操作)(9)

链接 第二步

单链表实现在哪插入元素(单向链表添加元素操作)(10)

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; }

猜您喜欢: