数据结构与算法(5、链表的拼接)
来源:互联网 发布:算法实现约瑟夫环c语言 编辑:程序博客网 时间:2024/06/02 18:58
今天复习一下链表的拼接,从2个链表的拼接开始
例如有一个链表A,一个链表B,A和B已经排序好,现在的需求是将链表A和链表B的元素按照排好序,然后形成新的链表C。
首先规划一下思路:
1、判断是否是空链表,如果是空链表,就返回另外一个链表
(第一个function isEmpty()判断是否是空链表)
2、如果不是空链表,那么让A和B的第一个元素进行比较,如果A的第一个元素(取链表头结点的元素)大于B的第一个元素,那么让B的第一个元素弹出(删除B中的元素),然后重新放在新的链表C中(链表尾部加入新的数据),在这个时候,我们需要定义三个方法,一个是取得链表的头结点的数据的方法getHeadData(),二是删除B链表的元素pop_element(),第三个是在链表的尾部插入新的结点push_back()
做好思路之后,下面实现每一个方法
* isEmpty()*
//判断链表是否是空,只需要判断void isEmpty(){//判断头结点是否是空结点 return head==nullptr;}
getHeadData()
int getHeadData(){ if(isEmpty()){ throws"您的链表是空链表"; }else{ //取出头结点的数值 return head->data; }}
pop_element()
void pop_element(){ if(isEmpty()){ throws"您的链表是空链表"; }else{ //注意如果是在java中,有GC机制,无需释放内存,会自动回收 node *p=head; head=head->next; delete p; }}
push_back()
void push_back(int value){ if(isEmpty()){ //如果C链表是空的,那么创建头结点和尾结点 head=tail=new node(value); }else{ //如果C不是空的,那么让新结点在尾部 tail->next=new node(value); //尾结点移动,便于下次插入执行下一步 tail=tail->next; }}
使用上面的方法的思路,我们可以得到A和B原来是有元素的,C是空的。最后在内存中C是有元素的,A和B都会消失,不存在内存中。
0 0
- 数据结构与算法(5、链表的拼接)
- 数据结构与算法 链表的操作
- C 链表的反转(数据结构与算法)
- 算法与数据结构(二) 基于链表的队列
- 数据结构与算法(单循环链表)
- 数据结构与算法(单循环链表)
- 数据结构与算法(单向链表)
- 数据结构与算法(双向链表)
- 数据结构与算法(5)--线性表
- 数据结构示例之链表拼接
- 数据结构与算法面试题汇编(1)- 链表的操作与应用
- 数据结构与算法分析笔记与总结(java实现)--字符串9:拼接最小字典序练习题
- 数据结构与算法分析-单向链表的实现
- 数据结构与算法分析-双向链表的实现
- 新手学习数据结构与算法---链表的箱子排序
- 【数据结构与算法】静态链表的游标实现
- 数据结构与算法-链表的基本操作---ShinPans
- 数据结构与算法学习之链表的增加、删除
- 数字组合
- Javaweb传参乱码
- U盘启动显示Starting cmain()...
- java 输入与输出
- IOS学习之蓝牙4.0
- 数据结构与算法(5、链表的拼接)
- Oracle数据库应用(一)
- Vim正则表达式
- php向js传值问题
- kmp算法(转自博客园 作者:阮一峰 )
- Log4J.xml的模板
- vim大小写转换
- 算法学习之java实现二分查找
- directory not found for option '-L/Users/niebinbin/Desktop/workhome/proj_niebinbin/AMHexinSdk-Demo/D