合并有序链表
来源:互联网 发布:linux中rpm命令 编辑:程序博客网 时间:2024/05/16 11:39
1问题描述:根据两个有序单链表生成一个新的有序单链表,原有单链表保持不变。要求新生成的链表中不允许有重复元素。
2算法思路:
一,用指针p指向单链表A的第一个结点(这里的第一个结点不包括头结点),用指针q指向单链表B的第一个结点(这里的第一个结点不包括头结点),
二,在指针p,q皆不为空的条件下循环,在此循环下可能为出现以下三种红情况。1:p指向的结点和q指向的结点中的数据相等,构建一个新的结点,将p(q)指向的结点中的数据赋值给新的结点,然后将指针p,q向后移一位;2:p指向的结点中的数据大于q指向的结点中的数据,构建一个新的结点,将q指向的结点中的数据赋值给新的结点,然后将指针q向后移一位;3:p指向的结点中的数据小于q指向的结点中的数据,构建一个新的结点,将p指向的结点中的数据赋值给新的结点,然后将指针p向后移一位;
三,第二步之后,只可能出现一条链表中的数据没有完全并入到新的有序链表中,所以分别检测指针p,q,如果不为空,则将其并入到新的有序链表中;
3代码示例:
#include<iostream>using namespace std;struct Node{int data;Node* next;};void CreateList(Node* &L);void ShowList(Node* L);void MergeList(Node* &AB, Node* A, Node* B);int main(){Node* AB = NULL;Node* A = NULL;Node* B = NULL;CreateList(A);CreateList(B);ShowList(A);ShowList(B);MergeList(AB, A, B);ShowList(AB);return 0;}void CreateList(Node* &L){Node* pTemp = NULL;Node* pTrail = NULL;L = new Node;L->data = 0;pTrail = L;int n = 0;cout << "List the count of the number: " ;cin >> n;int* Data = new int[n];cout << "Please input the " << n << " number: " << endl;for(int i=0; i<n; i++)cin >> Data[i];for(int j=0; j<n; j++){pTemp = new Node;pTemp->data = Data[j];pTemp->next = NULL;pTrail->next = pTemp;pTrail = pTrail->next;}pTrail = NULL;}void ShowList(Node* L){Node* p = L->next;while( p != NULL ){cout << p->data << " ";p = p->next;}cout << endl;}void MergeList(Node* &AB, Node* A, Node* B){AB = new Node;AB->data = 0;AB->next = NULL;Node* p = A->next;Node* q = B->next;Node* trail = AB;while( p != NULL && q != NULL){Node* temp = new Node;temp->next = NULL;if(p->data == q->data){temp->data = p->data;trail->next = temp;trail = trail->next;p = p->next;q = q->next;}else if( p->data < q->data){temp->data = p->data;trail->next = temp;trail = trail->next;p = p->next;}else{temp->data = q->data;trail->next = temp;trail = trail->next;q = q->next;}}while( p != NULL){Node* temp = new Node;temp->next = NULL;temp->data = p->data;trail->next = temp;trail = trail->next;p = p->next;}while( q != NULL){Node* temp = new Node;temp->next = NULL;temp->data = q->data;trail->next = temp;trail = trail->next;q = q->next;}trail = NULL;}
0 0
- 有序链表合并&有序数组合并
- 有序链表合并
- 合并有序链表
- 合并有序链表
- 合并有序链表
- 合并有序链表
- 有序链表合并
- 合并有序链表
- 合并有序链表
- 合并有序链表
- 有序链表合并
- 有序链表合并
- 合并有序链表
- 合并有序链表
- 合并有序链表
- 有序链表合并
- 合并有序链表
- 合并有序链表
- 关于缓冲区readLine函数的原理
- 新开项目只保留3.5寸的原因
- android电池系统
- win7下PL/SQL Developer的安装
- NGINX引入线程池 性能提升9倍
- 合并有序链表
- nginx php-fpm安装配置
- 关于oracle数据库的一些基本操作
- gdb调试
- 关于webservice的问题
- JVM工作原理和特点(一些二逼的逼神面试官会问的问题)
- 并行程序设计---cuda memory
- ubuntu12.04 解压jar包到指定目录
- MFC 重绘函数