基于visual Studio2013解决面试题之0402合并升序链表并去重
来源:互联网 发布:linux删除指定文件函数 编辑:程序博客网 时间:2024/05/19 19:44
题目
解决代码及点评
/*两个升序链表合并,并要求去掉重复元素*/#include <iostream>using namespace std;class LinkNode{public:int _val;LinkNode* _next;LinkNode(int val, LinkNode* next = NULL) :_val(val), _next(next){}};class Link{public:LinkNode* _head;Link() : _head(NULL){}/* 构造有序链表函数 */void add(int val){/* 如果头节点为空,则直接赋值头结点 */if (_head == NULL){_head = new LinkNode(val);return;}/* 循环找合适的位置,将新的val插入到链表中 */ for (LinkNode* pos = _head; ; pos = pos->_next){/* 如果找到末尾,还没有合适位置,那么新的val插入到尾部 */if (pos->_next == NULL){pos->_next = new LinkNode(val);break;}/* 如果某个位置的_val > val,那么新的val应该插入到该位置 */else if (pos->_next->_val > val){LinkNode* node = new LinkNode(val);node->_next = pos->_next;pos->_next = node;break;}}}/* 合并并去除重复节点 */void merge(const Link& link){LinkNode* pos = _head;// 遍历所有link节点for (LinkNode* node = link._head; node; node = node->_next){// 找到合适的位置进行插入操作for (;; pos = pos->_next){/* 如果值相等,那么直接丢弃 */if (pos->_val == node->_val)break;/* 如果找到末尾,则把新节点放到末尾 */if (pos->_next == NULL){pos->_next = new LinkNode(node->_val);pos = pos->_next;break;}/* 如果找到中间某个位置,那么新节点要插入 */else if (pos->_next->_val > node->_val){pos->_next = new LinkNode(node->_val, pos->_next);pos = pos->_next;break;}}}}/* 打印所有节点 */void print(){for (LinkNode* node = _head; node; node = node->_next){cout << node->_val << " ";}cout << endl;cout << "****************" << endl;}};int main(){Link l1;l1.add(1);l1.add(3);l1.add(5);l1.add(10);l1.print();Link l2;l2.add(1);l2.add(5);l2.add(4);l2.add(3);l2.add(6);l2.print();l1.merge(l2);l1.print();system("pause");}
代码下载及其运行
代码下载地址:http://download.csdn.net/detail/yincheng01/6704519
解压密码:c.itcast.cn
下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:
1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”
2)在下拉框中选择相应项目,项目名和博客编号一致
3)点击“本地Windows调试器”运行
程序运行结果
0 0
- 基于visual Studio2013解决面试题之0402合并升序链表并去重
- 基于visual Studio2013解决面试题之1006判断升序
- 基于visual Studio2013解决面试题之1102合并字符串
- 基于visual Studio2013解决面试题之0604O(1)时间复杂度删除链表节点
- 基于visual Studio2013解决面试题之0609寻找链表公共节点
- 基于visual Studio2013解决面试题之0804复杂链表
- 基于visual Studio2013解决面试题之0201二叉树转链表
- 基于visual Studio2013解决面试题之0203栈实现
- 基于visual Studio2013解决面试题之0205查找路径
- 基于visual Studio2013解决面试题之0207单词翻转
- 基于visual Studio2013解决面试题之0202上下排
- 基于visual Studio2013解决面试题之0301累加
- 基于visual Studio2013解决面试题之0303数组求和
- 基于visual Studio2013解决面试题之0308Fibonacci数列
- 基于visual Studio2013解决面试题之0403串联字符串
- 基于visual Studio2013解决面试题之0407数组差
- 基于visual Studio2013解决面试题之0501上台阶
- 基于visual Studio2013解决面试题之0504单链表逆序
- LeetCode | Edit Distance
- ubuntu nfs服务器
- S5PV210 之Sate210-F 开发板配套七寸LCD 调试成功,解决了显示上下左右相反的问题
- 电脑最大支持多少内存是指什么意义?
- Small-OS智能卡操作系统的设计准则
- 基于visual Studio2013解决面试题之0402合并升序链表并去重
- Hadoop实战-初级部分 之 Hadoop 分布式文件系统2
- Struts2的配置
- 软件工程实验报告 一
- 斐波那契数列使用递归为何效率不高
- java使用泛型进行数组交换
- 来纽约十个月了
- JDBC 与ODBC的区别
- C# TabControl 不显示选项卡标题