数据结构与算法(5、链表的拼接)
2015-07-22 22:12
260 查看
今天复习一下链表的拼接,从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()*
getHeadData()
pop_element()
push_back()
使用上面的方法的思路,我们可以得到A和B原来是有元素的,C是空的。最后在内存中C是有元素的,A和B都会消失,不存在内存中。
例如有一个链表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都会消失,不存在内存中。
相关文章推荐
- 数据结构学习--队列
- 数据结构学习--队列
- 数据结构——UVA 1600 机器人巡逻
- 数据结构与算法分析1.8
- EntityFramework 5.0 CodeFirst 教程03-数据结构的定义/列的属性
- Android的NDK开发(4)——JNI数据结构之JNINativeMethod
- Android的NDK开发(4)——JNI数据结构之JNINativeMethod
- 初学数据结构之队列
- 【数据结构与算法分析1.2】编写一个程序求解字谜游戏问题
- HDOJ 5296 Annoying problem LCA+数据结构
- 数据结构算法代码
- C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用
- 数据结构与算法分析(C语言描述)L1.1
- 数据结构与算法分析第二章读书笔记
- [Windows驱动开发](二)基础知识——数据结构
- java数据结构和算法------图
- 数据结构——二叉树的遍历
- linux常用c函数 数据结构及算法篇
- 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)
- 数据结构与算法(4、约瑟夫环问题到循环链表)