【编程题目】请修改 append 函数,利用这个函数实现两个非降序链表的并集
2014-09-28 20:07
537 查看
42.请修改 append 函数,利用这个函数实现(链表):
两个非降序链表的并集,1->2->3 和 2->3->5 并为 1->2->3->5
另外只能输出结果,不能修改两个链表的数据。
感觉网上理解题意略有不同,我理解的题意:
只是输出最后的结果,不用生成一个新的链表,也不修改原有链表。
给的数据非降序就是 1 1 2 2 3 这样可以有重复数字的递增
输出时,不显示重复的数字。
基于这些理解,题目不难,代码如下:
两个非降序链表的并集,1->2->3 和 2->3->5 并为 1->2->3->5
另外只能输出结果,不能修改两个链表的数据。
感觉网上理解题意略有不同,我理解的题意:
只是输出最后的结果,不用生成一个新的链表,也不修改原有链表。
给的数据非降序就是 1 1 2 2 3 这样可以有重复数字的递增
输出时,不显示重复的数字。
基于这些理解,题目不难,代码如下:
/* 42.请修改 append 函数,利用这个函数实现(链表): 两个非降序链表的并集,1->2->3 和 2->3->5 并为 1->2->3->5 另外只能输出结果,不能修改两个链表的数据。 start time = 19:29 end time = 19:57 */ #include <iostream> using namespace std; typedef struct List { int m_value; List * p_next; }List; void append(List * L1, List * L2) { List * p1 = L1; List * p2 = L2; //两个链表都没走空 while(p1 != NULL && p2 != NULL) { int v; if(p1->m_value > p2->m_value) { v = p2->m_value; cout << p2->m_value; while(p2 != NULL && p2->m_value == v) p2 = p2->p_next; } else if(p1->m_value < p2->m_value) { v = p1->m_value; cout << p1->m_value; while(p1 != NULL && p1->m_value == v) p1 = p1->p_next; } else { v = p1->m_value; cout << p1->m_value<<" "; while(p1 != NULL && p1->m_value == v) p1 = p1->p_next; while(p2 != NULL && p2->m_value == v) p2 = p2->p_next; } if(p1 == NULL && p2 == NULL) cout<<endl; else cout<<"->"; } //若p1未走空 while(p1 != NULL) { int v = p1->m_value; cout << p1->m_value; while(p1 != NULL && p1->m_value == v) p1 = p1->p_next; if(p1 == NULL) cout<<endl; else cout<<"->"; } //若p2未走空 while(p2 != NULL) { int v = p2->m_value; cout << p2->m_value; while(p2 != NULL && p2->m_value == v) p2 = p2->p_next; if(p2 == NULL) cout<<endl; else cout<<"->"; } } void createList(List * &Head) { int data; cin >> data; if(data != 0) { Head = new List; Head->m_value = data; Head->p_next = NULL; createList(Head->p_next); } } int main() { List * L1 = NULL; List * L2 = NULL; createList(L1); createList(L2); append(L1, L2); return 0; }
相关文章推荐
- 请修改append 函数,利用这个函数实现:两个非降序链表的并集,1->2->3 和2->3->5 并为1->2->3->5 另外只能输出结果,不能修改两个链表的数据。
- 42.请修改append函数,利用这个函数实现(链表):
- 请修改append函数,利用这个函数实现
- 请修改append函数,利用这个函数实现
- 题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能
- 42 修改append函数,实现:两个非降序链表的并集
- 9.2.利用函数swap用函数编程实现两个数组中对应元素值的交换。
- 【编程题目】合并两个排序链表(C++实现)
- 36. 微软面试题:请修改append函数, 利用函数实现(链表)
- 用链表实现两个集合求并集
- 第一次发博客,新手初试啊,题目如下:有两个10个元素的数组,分别为A和B,编程实现相同位置的元素, 如果 B 的元素小于 A 的元素进行数值交换:(使用回调函数实现)
- 【剑指Offer面试编程题】题目1519:合并两个排序的链表--九度OJ
- 【剑指Offer面试编程题】题目1505:两个链表的第一个公共结点--九度OJ
- 3.1题目: 利用递归方法实现一个函数,该函数能够实现n的阶乘,即 n! = n*(n-1)*…*3*2*1;
- 可视化webpart基础开发——利用事件接收器实现同步操作两个文档库(添加、删除、修改文档)
- 函数调用栈学习笔记(做两个利用函数调用栈实现的例子)
- 可视化webpart基础开发——利用事件接收器实现同步操作两个文档库(添加、删除、修改文档)
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 面试题7:用两个栈实现队列,队列的声明如下,请实现它的两个函数appendTail和deleteHead, 分别完成在队列尾部插入结点和在队列头部删除节点的功能。
- 编程实现,有12升水,怎样利用一个8升和一个5升的容器将水分为两个6升